文章,xml代码部分参考链接http://blog.youkuaiyun.com/coolcoffee168/article/details/6368949
一、log4j的使用过程,通用步骤如下:
1.加入log4j-xx.jar——提供相关类的支持2.写log4j.properties或log4j.xml,可自行命名——log4j本身的配置文件
3.载入配置文件,spring环境中可以用spring自带的Log4jConfigListener监听器来加载,只需要通过context-param指定配置文件的位置及加载参数
代码中手动载入的方式是通过 PropertyConfigurator.configure(file)方法来载入
4.获得logger——直接用log4j:Logger logger = Logger.getLogger(“xxx”)
通过commcon-logging : Log logger2 = LogFactory.getLog("mytest");
getLogger的参数既可以指定log4j.xml中配置好的logger、category名字,也可以指定为任意的字符串、test.class。首先会去配置文件中扫描,如果有同名的logger或者category则直接加载使用,如果没有,则创建一个新的logger,名称为指定字符串或者类的全名,打印级别、appender的设置与其上级logger一致,比如rootLogger。如果rootLogger的配置为空,则无法正常打印出日志
5.使用 ——如logger.info()等二、log4j配置文件介绍
1.properties文件
log4j.rootCategory=INFO, stdout , R //日志级别, appender1, appender2
//appender1的配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender //appender所对应的支持类
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout //指定布局模式,必须同时指定conversionPattern
log4j.appender.stdout.layout.ConversionPattern=%d-[HL] %p %t %c - %m%n //指定具体的输出样式
//appender2的配置
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${应用名.root}/WEB-INF/logs/xx.log //输出的文件路径
log4j.appender.R.MaxFileSize=1024KB //每个日志文件的最大的大小,超过则新建一个文件
log4j.appender.R.MaxBackupIndex=10 //新建文件的最大个数
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[HL] %p %t %c - %m%n // %d:日期时间 %p:打印优先级 %c:类全名 %m:代码中指定的消息 %n:换行
2.xml 文件
xml方式比properties方式使用更为方便,大概模板如下
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> //文档定义
<log4j:configuration>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">...</appender>
<appender name="FILE" class="org.apache.log4j.FileAppender">...</appender>
<appender name="DATABASE" class="org.apache.log4j.jdbc.JdbcAppender"></appender>\
<logger name="mytest" additivity = "false">
<level value="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<logger>
<category name="dbtest">
<level value="ERROR">
<appender-ref ref="DATABASE"/>
<category> <root>
<level value="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</log4j:configuration>
如上所示,给出了一个标准的log4j的xml格式的配置文件。 (1)appender元素给出了日志输出目的地的定义,不同种类的appender,其对应的具体参数均不同,但都会指定layout,通常指定为PatternLayout,一旦 指定了PatternLayout布局方式,就要指定其输出样式ConversionLayout。通常ConversionLayout为表达式,但是当appender类型为JdbcAppender时,value 为insert语句,如INSERT INTO iecs.log4j(stamp,thread, info_level,`class`,message) VALUES ('%d', '%t', '%p', '%c', '%m'),表格需要事先建好。 (2)category 和 logger都可以用来定义一个日志输出器,可以在加载Logger的时候指定需要加载的日志输出器名字。如Logger.getLogger("mytest"), level是日志打印级别,appender-ref 指定了所引用的appender。
(3)如果定义了上述root节点,则在打印日志信息的时候,会发现日志被重复打印了。解决这个问题,要么去掉root节点的定义;要么加上 addtivity="false"属性。
附上完整的配置代码
<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d - %c -%-4r [%t] %-5p %x - %m%n" />
</layout>
<!--限制输出级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="ERROR"/>
<param name="LevelMin" value="TRACE"/>
</filter>
</appender>
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="File" value="${catalina.home}/logs/testxml.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d - %c -%-4r [%t] %-5p %x - %m%n" />
</layout>
</appender>
<appender name="DATABASE" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:mysql://10.47.180.190:5518/mydb"/>
<param name="driver" value="com.mysql.jdbc.Driver"/>
<param name="user" value="root"/>
<param name="password" value="*****"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="INSERT INTO iecs.log4j(stamp,thread, info_level,`class`,message) VALUES ('%d', '%t', '%p', '%c', '%m')" />
</layout>
</appender>
<!-- 发邮件(只有ERROR时才会发送!) -->
<appender name="MAIL"
class="org.apache.log4j.net.SMTPAppender">
<param name="threshold" value="debug" />
<!-- 日志的错误级别
<param name="threshold" value="fatal"/>
-->
<!-- 缓存文件大小,日志达到512K时发送Email -->
<param name="BufferSize" value="512" /><!-- 单位K -->
<param name="From" value="test@163.com" />
<param name="SMTPHost" value="smtp.163.com" />
<param name="Subject" value="juyee-log4jMessage" />
<param name="To" value="test@163.com" />
<param name="SMTPUsername" value="test" />
<param name="SMTPPassword" value="test" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n" />
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="256" />
<appender-ref ref="DATABASE" />
</appender>
<!--通过<logger></logger>的定义可以将各个包中的类日志输出到不同的日志文件中-->
<logger name="com.litt2.log4j" additivity="false">
<level value="WARN" />
<appender-ref ref="CONSOLE" />
</logger>
<!--通过<category></category>的定义可以将各个包中的类日志输出到不同的日志文件中-->
<logger name="mytest" additivity="false">
<level value="DEBUG" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</logger>
<category name="dbtest">
<priority value="info"/>
<appender-ref ref="DATABASE"/>
</category>
<root>
<level value="INFO"></level>
<appender-ref ref="CONSOLE"/>
</root>
</log4j:configuration>
三、载入配置文件
1.Spring方式 监听器+context-param
2.默认加载
如果取名叫做log4j.properties,则log4j会自动载入配置文件,log4j.properties放在classpath下面
3.手动加载
PropertyConfigurator.configure("D:\\develop\\apache-tomcat-6.0.24-spring\\wtpwebapps\\mvctest\\WEB-INF\\classes\\log4jxxxx.properties");