一、xml文件的配置,首先给出一个最简配置的log4j.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd" > <log4j:configuration> <!-- 控制台输出日志信息 --> <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n"/> </layout> </appender> <!-- 每天产生一个日志文件 --> <appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender"> <param name="file" value="D:/main.log"/> <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --> <param name="append" value="true"/> <param name="encoding" value="UTF-8"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n"/> </layout> </appender> <!--通过邮件发送 --> <appender name="EMAIL_QQ" class="org.apache.log4j.net.SMTPAppender"> <param name="Threshold" value="INFO"/> <param name="BufferSize" value="128" /> <param name="SMTPHost" value="smtp.qq.com" /> <param name="From" value="[email protected]" /> <param name="To" value="[email protected]" /> <param name="Subject" value="测试邮件发送" /> <param name="SMTPUsername" value="41335*****" /> <param name="SMTPPassword" value="*********" /> <param name="LocationInfo" value="true" /> <param name="SMTPDebug" value="true" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n"/> </layout> </appender> <!--定义logger输出器--> <logger name="file" additivity="true"> <level value="INFO"/> <appender-ref ref="fileAppender"/> </logger> <!--定义根日志输出类--> <root> <!-- 控制日志输出级别 --> <priority value="INFO"/> <appender-ref ref="consoleAppender"/> </root> </log4j:configuration>
二、log4.properties属性文件的配置方式:
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout log4j.appender.consoleAppender.layout.ConversionPattern=%m%n log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout log4j.appender.fileAppender.layout.ConversionPattern=%m%n log4j.rootLogger=DEBUG, consoleAppender log4j.logger.test=DEBUG, fileAppender
(A)先来分析一下上面的配置文件:
logger标签设置一个logger输出器,additivity=true则表示这个logger输出的日志也会再root中输出
root元素定义根日志输出器一个logger可以向多个appender输出,一个appender可以被多个logger共同使用。
(B)简单的测试程序(注意添加log4j-1.2.17.jar到工程中):
package com.tliu.case2; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; public class Log4jTest { public static void main(String[] args) { DOMConfigurator.configure("log4j.xml"); //PropertyConfigurator.configure("log4j.properties"); Logger root = Logger.getRootLogger(); Logger file = Logger.getLogger("file"); root.info("root logger"); file.info("file logger"); } }
三、Appender配置日志输出的目的地:
org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志) org.apache.log4j.ConsoleAppender (控制台) org.apache.log4j.FileAppender (文件) org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件) org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方) org.apache.log4j.net.SMTPAppender(邮件发送)
四、日志的输出级别,优先级由高到低有FATAL ,ERROR ,WARN ,INFO ,DEBUG五个级别
五、ConversionPattern布局参数说明:
5.1示例:log4j.appender.R.layout.ConversionPattern=%d{yyyy-MMM-dd HH:mm:ss,SSS}-[TS] %p %t %c - %m%n
输出:2014-08-12 10:45:30,000-[TS] INFO thread30 TestClass - 日志内容
5.2参数说明:
%c:输出类的全名c{n} n表示显示的包路径层数如%c显示com.login.test则%c{1}显示test而%c{2显示login.test
%C:(C大写)输出日志所属类目的调用者的全类名
%L:只输出在代码中的行数
%d:输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
%l:输出日志事件发生位置,包括类目名、发生线程,在代码中的行数 相当于%C%M(%F:%L)
%n:换行符
%m:输出代码指定信息,如info(“message”),输出message
%p:输出优先级,即 FATAL ,ERROR 等
%r:输出从启动到显示该log信息所耗费的毫秒数
%t:输出产生该日志事件的线程名
%F 输出日志消息产生时所在的文件名称。性能不好,不建议使用
%M 输出日志消息产生时所在的方法名称。性能不好,不建议使用
%x 输出和当前线程相关联的NDC(nested diagnostic context)环境,用于多客户多线程的应用中
%X 输出和当前线程相关联的MDC(mapped diagnostic context)环境
5.3一些输出格式说明:
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,”-”号指定左对齐。
%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话 也不会有空格。
%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边将多出的字符截掉。
六、Web项目配置log4j,将以下内容到WEB-INF/web.xml
<context-param> <param-name>webAppRootKey</param-name> <param-value>web.root</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.xml</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
则${web.root}是web工程相对路径。