- 浏览: 13839 次
- 性别:
- 来自: 西安
最新评论
-
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简介与重要性 Log4j是一种广泛使用的开源日志框架,由Apache软件基金会维护。它主要用于记录Java应用程序的运行时信息,帮助开发者追踪应用程序的行为、调试问题以及进行性能...
这个压缩包"Log4j及其配置.rar"包含了Log4j的jar包(log4j-1.2.15.jar)以及相关的配置文档,旨在帮助开发者理解和使用Log4j。 一、Log4j介绍 Log4j是Apache软件基金会的一个开源项目,最初由Ceki Gülcü创建。它...
- **Appender(输出器)**:负责将日志信息输出到指定的目标,比如控制台、文件、电子邮件、数据库等。 - **Layout(布局)**:定义了日志信息的输出格式,例如简单的文本格式、XML格式或HTML格式。 - **Level...
最新的 log4j 版本(包括完整的源代码、类文件和文档)可以在 [http://logging.apache.org/log4j/2.x/index.html](http://logging.apache.org/log4j/2.x/index.html) 上找到。 #### 1. 插入日志语句到代码中作为...
Log4j 2.3提供了多种内置Appender,如ConsoleAppender(控制台)、FileAppender(文件)和SMTPAppender(电子邮件)等,开发者也可以自定义Appender来满足特定需求。 4. **Layout**:布局定义了日志事件的输出格式...
Log4j提供了多种内置的Appender,如ConsoleAppender(控制台)、FileAppender(文件)和SMTPAppender(邮件)等。 3. **Layout**:Layout定义了日志消息的格式,比如简单布局(SimpleLayout)、HTML布局...
log4j的配置主要通过`log4j.properties`或`log4j.xml`文件完成,其中包含对logger、appender和layout的定义。例如,以下是一个简单的配置示例: ```properties # 配置控制台输出 log4j.rootLogger=DEBUG, Console ...
在使用Log4j记录Debug日志时,确保项目中引入了相应的Log4j库,并正确配置了`log4j.properties`或`log4j.xml`文件,设置DEBUG级别,然后在代码中使用Logger对象进行日志记录。例如: ```java import org.apache.log4...
3. **Appenders**:Appender是Log4j的一个核心组件,它负责将日志信息发送到特定的目标,如控制台、文件、电子邮件、数据库等。常见的Appender有ConsoleAppender(控制台)、FileAppender(文件)、SMTPAppender...
`log4j-creator.jar`可能是一个辅助工具,用于创建和配置log4j的配置文件,帮助开发者更方便地管理日志配置。 ### 5. 示例:TestLog.java `TestLog.java`是一个简单的示例类,展示了如何在代码中使用Log4j记录日志...
描述"LOG4J的配置范例常用log4j配置,log4j配置手册"表明这个压缩包提供了Log4J的常见配置示例和完整的配置手册,帮助开发者理解和使用Log4J进行日志管理。 **Log4J核心概念** 1. **日志级别**:Log4J支持多个日志...
Log4j是Apache组织提供的一款广泛使用的Java日志框架,它具有高效、灵活、可配置等特点。本篇文章将深入探讨Log4j的使用,并通过实例进行讲解。 ### 1. Log4j的基本概念 - **Logger**: 日志器是Log4j的核心组件,...
**Log4j配置详解** Log4j是一款广泛应用于Java编程中的日志记录框架,它提供了灵活且强大的控制日志信息的能力。这篇教程将带你深入理解并掌握如何配置Log4j,以便在你的Java项目中有效地使用它。 首先,我们要...
Log4j是由Apache软件基金会开发的一个开源日志记录框架,它提供了丰富的日志级别(DEBUG、INFO、WARN、ERROR、FATAL),灵活的日志配置以及多种输出方式,包括控制台、文件、数据库等。Log4j 1.2.5是其早期的一个...
1. **配置文件**:`log4j.properties`或`log4j.xml`是Log4j的核心配置,决定了日志信息如何被记录、输出和格式化。配置中通常包含Appender(输出目的地,如控制台、文件)、Layout(日志格式)和Logger(日志级别)...
《Log4j手册.pdf》可能包含了更深入的使用指南和最佳实践,如如何配置Log4j.properties或log4j.xml文件,如何使用MDC(Mapped Diagnostic Context)进行日志关联,以及如何在复杂的应用环境中部署和管理Log4j。...
LOG4J提供了多种Appender,如ConsoleAppender(控制台输出)、FileAppender(文件输出)和SMTPAppender(邮件发送)。开发者可以根据项目需求选择或自定义Appender。 **四、Layout** Layout则规定了日志信息的输出...
4. **Appender**:Appender是Log4j的核心组件之一,用于指定日志信息的输出位置,如ConsoleAppender(控制台)、FileAppender(文件)、SMTPAppender(邮件)等。 5. **Layout**:Layout决定了日志信息的显示格式,...