- 浏览: 13517 次
- 性别:
- 来自: 西安
最新评论
-
moxue2459:
放在classpath(src)下
log4j 自定义级别 -
Kim_T:
问一下你log4j.xml是不是放在 WEB-INF下面
log4j 自定义级别
以下是完整的一个log4j 的配置。包括 分级别存储。存储到数据库。发送邮件。生成html等。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "../WebRoot/WEB-INF/config/log4j/log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!--输出到控制台 -->
<appender name="LOG.Console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
<!--滤镜设置输出的级别 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="debug" />
<param name="levelMax" value="fatal" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!--将级别为INFO的信息输出到文件 -->
<appender name="LOG.INFO" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/info.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5120KB" />
<param name="MaxBackupIndex" value="1000" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="info" />
<param name="LevelMax" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!--将级别为WARN的信息输出到文件 -->
<appender name="LOG.WARN" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/warn.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5120KB" />
<param name="MaxBackupIndex" value="1000" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="warn" />
<param name="LevelMax" value="warn" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!--将级别为ERROR的信息输出到文件-->
<appender name="LOG.ERROR" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/error.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5120KB" />
<param name="MaxBackupIndex" value="1000" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="error" />
<param name="LevelMax" value="error" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!--将级别为 info 级别以上的信息输出到文件 log4j.log-->
<appender name="LOG.LOG4J" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="logs/log4j.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />
</layout>
<!-- 注掉过滤器 将所有信息存到log4j.log -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!--将级别为DEBUG的信息输出到文件 -->
<appender name="LOG.DEBUG" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/debug.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5120KB" />
<param name="MaxBackupIndex" value="1000" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="debug" />
<param name="LevelMax" value="debug" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!-- 将级别为 error 的信息 发送邮件 -->
<appender name="LOG.EMAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="From" value="发送者邮箱" />
<param name="To" value="接受者邮箱" />
<param name="SMTPUsername" value="发送者邮箱 用户名" />
<param name="SMTPPassword" value="发送者邮箱 密码" />
<param name="threshold" value="error"/>
<param name="BufferSize" value="10" />
<param name="SMTPHost" value="smtp.163.com" />
<param name="Subject" value="Log4J Message" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n"/>
</layout>
</appender>
<!-- 将级别为 错误信息 生成html -->
<appender name="LOG.HTML" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="logs/exception.html" />
<param name="threshold" value="info"/>
<param name="BufferSize" value="10" />
<layout class="other.log4j.FormatHTMLLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n"/>
</layout>
</appender>
<!-- 将级别为 error 的信息输出到数据库 -->
<appender name="LOG.DB" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="driver" value="com.mysql.jdbc.Driver" />
<param name="URL" value="jdbc:mysql://127.0.0.1/log4j?useUnicode=true&characterEncoding=UTF-8"/>
<param name="user" value="root" />
<param name="password" value="admin" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="INSERT INTO log4j(USERID,LOGTIME,LOGLEVEL,LOGACTION,MESSAGE)VALUES('%X{userId}','%d{yyyy-MM-dd HH:mm:ss}','%p','%l','%m')" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="error" />
<param name="levelMax" value="error" />
<param name="acceptOnMatch" value="true" />
</filter>
</appender>
<!--
CREATE TABLE `log4j` (
`userid` VARCHAR(11) NULL DEFAULT NULL,
`logtime` VARCHAR(50) NULL DEFAULT NULL,
`logaction` VARCHAR(100) NULL DEFAULT NULL,
`loglevel` VARCHAR(100) NULL DEFAULT NULL,
`message` VARCHAR(255) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
-->
<root>
<priority value="debug" />
<appender-ref ref="LOG.Console" />
<appender-ref ref="LOG.DEBUG" />
<appender-ref ref="LOG.INFO" />
<appender-ref ref="LOG.WARN" />
<appender-ref ref="LOG.ERROR" />
<appender-ref ref="LOG.LOG4J" />
<appender-ref ref="LOG.DB" />
<appender-ref ref="LOG.EMAIL" />
<appender-ref ref="LOG.HTML" />
</root>
</log4j:configuration>
-----------------------------------
注意:
1. 在分级别输出日志时,log4.properties不能使用Filter拦截日志级别,而log4j.xml可以,从这点就感觉log4j.xml要强大些 .
2.log4j.xml插入数据库的时候sql写在layout属性的ConversionPattern参数中,而log4.properties则有单独的sql属性接受配置文件中的sql语句 .
3. 在将日志信息写到HTML时,布局需要开发人员根据样式重写。下面是一个简单的例子:
public class FormatHTMLLayout extends HTMLLayout {
protected final int BUF_SIZE = 256;
protected final int MAX_CAPACITY = 1024;
static String TRACE_PREFIX = "<br> ";
private StringBuffer sbuf = new StringBuffer(BUF_SIZE);
String title = "异常信息";
public static final String TITLE_OPTION = "Title";
boolean locationInfo = true;
public FormatHTMLLayout() {
}
public String format(LoggingEvent event) {
if (sbuf.capacity() > MAX_CAPACITY) {
sbuf = new StringBuffer(BUF_SIZE);
} else {
sbuf.setLength(0);
}
sbuf.append(Layout.LINE_SEP + "<tr>" + Layout.LINE_SEP);
sbuf.append("<td>");
sbuf.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()));
sbuf.append("</td>" + Layout.LINE_SEP);
sbuf.append("<td>");
if (event.getLevel().equals(Level.FATAL)) {
sbuf.append("<font color=\"#339933\">");
sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));
sbuf.append("</font>");
} else if (event.getLevel().isGreaterOrEqual(Level.WARN)) {
sbuf.append("<font color=\"#993300\"><strong>");
sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));
sbuf.append("</strong></font>");
} else {
sbuf.append("<font color=\"green\">");
sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));
sbuf.append("</font>");
}
sbuf.append("</td>" + Layout.LINE_SEP);
if (locationInfo) {
LocationInfo locInfo = event.getLocationInformation();
sbuf.append("<td>");
sbuf.append(Transform.escapeTags(locInfo.getFileName()));
sbuf.append(':');
sbuf.append(locInfo.getLineNumber());
sbuf.append("</td>" + Layout.LINE_SEP);
}
sbuf.append("<td>");
sbuf.append(Transform.escapeTags(event.getRenderedMessage()));
sbuf.append("</td>" + Layout.LINE_SEP);
sbuf.append("</tr>" + Layout.LINE_SEP);
if (event.getNDC() != null) {
sbuf.append("<tr><td bgcolor=\"#EEEEEE\" style=\"font-size : xx-small;\" colspan=\"6\" title=\"Nested Diagnostic Context\">");
sbuf.append("NDC: " + Transform.escapeTags(event.getNDC()));
sbuf.append("</td></tr>" + Layout.LINE_SEP);
}
String[] s = event.getThrowableStrRep();
if (s != null) {
sbuf.append("<tr><td bgcolor=\"#993300\" style=\"color:White; font-size : xx-small;\" colspan=\"4\">");
appendThrowableAsHTML(s, sbuf);
sbuf.append("</td></tr>" + Layout.LINE_SEP);
}
return sbuf.toString();
}
private void appendThrowableAsHTML(String[] s, StringBuffer sbuf) {
if (s != null) {
int len = s.length;
if (len == 0)
return;
sbuf.append(Transform.escapeTags(s[0]));
sbuf.append(Layout.LINE_SEP);
for (int i = 1; i < len; i++) {
sbuf.append(TRACE_PREFIX);
sbuf.append(Transform.escapeTags(s[i]));
sbuf.append(Layout.LINE_SEP);
}
}
}
public String getHeader() {
StringBuffer sbuf = new StringBuffer();
sbuf.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\" >" + Layout.LINE_SEP);
sbuf.append("<html>" + Layout.LINE_SEP);
sbuf.append("<head>" + Layout.LINE_SEP);
sbuf.append("<title>" + title + "</title>" + Layout.LINE_SEP);
sbuf.append("<style type=\"text/css\">" + Layout.LINE_SEP);
sbuf.append("<!--" + Layout.LINE_SEP);
sbuf.append("body, table {font-family: '??',arial,sans-serif; font-size: 12px;}" + Layout.LINE_SEP);
sbuf.append("th {background: #336699; color: #FFFFFF; text-align: left;}" + Layout.LINE_SEP);
sbuf.append("-->" + Layout.LINE_SEP);
sbuf.append("</style>" + Layout.LINE_SEP);
sbuf.append("<meta http-equiv=\"Content-Type\" content=\"text/html\"; charset=\"UTF-8\"> </meta>" + Layout.LINE_SEP);
sbuf.append("</head>" + Layout.LINE_SEP);
sbuf.append("<body bgcolor=\"#FFFFFF\" topmargin=\"6\" leftmargin=\"6\">" + Layout.LINE_SEP);
sbuf.append("<table cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">" + Layout.LINE_SEP);
sbuf.append("<tr>" + Layout.LINE_SEP);
sbuf.append("<th>时间</th>" + Layout.LINE_SEP);
sbuf.append("<th>异常级别</h>" + Layout.LINE_SEP);
if (locationInfo) {
sbuf.append("<th>错误位置</th>" + Layout.LINE_SEP);
}
sbuf.append("<th>错误信息</th>" + Layout.LINE_SEP);
sbuf.append("</tr>" + Layout.LINE_SEP);
sbuf.append("<br></br>" + Layout.LINE_SEP);
return sbuf.toString();
}
}
效果图 参考附件。
4.在日志信息写入到数据库时:
public static void Log4jXML() {
Logger logger = Logger.getLogger(LogRun.class);
MDC.put("userId", "11");
logger.error("test_Error");
logger.warn("test_warn");
logger.info("test_Info");
logger.debug("test_debug");
MDC.remove("userId");
}
这里的 MDC :用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息.
如图:http://my.iteye.com/admin/picture/118833.
- exception.zip (757 Bytes)
- 下载次数: 4
相关推荐
日志处理组件log4j的配置 通过log4j可以实现信息的分级别的输出,可以将日志信息输出到控制台、文件、HTML文件、数据库、还可以发送电子邮件,功能相当给力
项目全程采用LOG4J2作为日志框架,包括控制台输出、记录到文件、严重错误发送邮件提醒、将日志记录至数据库;图片、视频、附件上传保存在云存储,提升浏览速度、安全性能、稳定性;完善的管理员权限体系,将权限分配...
EML:Microsoft Outlook Express邮件消息(MIME RTC822)文件 EXE:可执行文件(程序) F FAV:Microsoft Outlook导航条 FAX:传真类型图像 FCD:虚拟CD-ROM FDF:Adobe Acrobat表单文档文件 FLA:Macromedia...
14.Other: Log4j,Velocity,Sitemesh,Jfreechart,Jforum,Solr 15.Maven 2 3.BPMX3的组件构建方式 BPMX3同时也是基于组件构构建,整个系统的构建如下所示: 【图三】BPMX3组件构建 系统提供在线流程设计器,...
a.4spring与log4j 附录b用(和不用)spring进行测试 b.1测试简介 b.1.1理解不同类型的测试 b.1.2使用junit b.1.3spring在测试中的角色 b.2单元测试springmvc控制器 b.2.1模拟对象 b.2.2断言modelandview的内容...
A.4 Spring与Log4j 附录B 用(和不用)Spring进行测试 B.1 测试简介 B.1.1 理解不同类型的测试 B.1.2 使用JUnit B.1.3 Spring在测试中的角色 B.2 单元测试Spring MVC控制器 B.2.1 模拟对象 B.2.2 断言...
A.4 Spring与Log4j 附录B 用(和不用)Spring进行测试 B.1 测试简介 B.1.1 理解不同类型的测试 B.1.2 使用JUnit B.1.3 Spring在测试中的角色 B.2 单元测试Spring MVC控制器 B.2.1 模拟对象 B.2.2 断言...
1.7.1. MySQL邮件列表 1.7.2. IRC(在线聊天系统)上的MySQL社区支持 1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. 选择SQL模式 1.8.3. 在ANSI模式下运行MySQL ...
本手册编译于2006-7-29,目录及索引由官方HTML文档转换并加以修订,如有链接错误请发送邮件至: hemono@gmail.com 。获取最新CHM及PDF版本,请访问:hemon.ecjtu.net 。 张伟,华东交通大学。 摘要 这是MySQL参考...
增加Slf4jLogger实现,然日志配置能基于任何Slf4j下的log实现,如logback public class Slf4jLogFactory implements ILoggerFactory 3.基础model实现,实现基础的常用的部分功能用于复用 public List ...
主要框架后端:SpringMVC + Hibernate ORM + MySQL + Hibernate Search(Apache Lucence) + IK中文分词 + Log4J + ...前端:Jquery + Layui + wangEditor/KindEditor + JSON + Ajax三.实现功能(标记★的为关键的或...