首先,log4j的配置有两种方式一种是使用properties文件,一种是使用xml文件。一般看你的习惯了,我是喜欢使用xml文件的。基本配置的主要内容分为二大块,一块是appender你可以认为是输出方式,一块是Logger就是日志记录器。
appender常用的有输出到控制台的、输出到文件的、输出到数据库的,以及输出到某个socket的。每个appender需要设置它的输出格式也就是layout。layout也有许多种,我经常使用XMLLayout,主要是我喜欢用log4j自带的chainsaw这个工具来查看日志,这个工具只能查看XML格式的文档。如果不用这个工具,那一般就会使用PatternLayout,然后设置ConversionPattern即具体的输出格式。
logger是用来区分不同的日志记录器的。log4j中最高的级别是root,自己定义的级别都是root的子logger。每个logger都可以指定appender,如果没有指定就按照其父logger的appender来输出。举个例子:net.example,如果没有指定它的appender则它会去找net的appender,如果net也没有指定就按照root的来。所以,一般来说你需要指定root的appender,不然如果你没有为某一特定category的logger指定appender就会显示log4j初始化出错。此外logger的设置中还需要指定需要输出的日志级别,日志级别有info,warn,error,debug,fatal等,你也可以定义自己的级别。
在配置文件中完成后,需要将log4j.jar和log4j.xml(log4j.properties)放在类路径上,这样会起作用。下面是一个log4j.xml的例子。
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
- <log4j:configuration debug="true"
- xmlns:log4j='http://jakarta.apache.org/log4j/'>
- <appender name="CON" class="org.apache.log4j.FileAppender">
- <param name="Threshold" value="INFO"/>
- <param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/system.log"/>
- <layout class="org.apache.log4j.xml.XMLLayout"/>
- </appender>
- <appender name="HIBERNATE" class="org.apache.log4j.FileAppender">
- <param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/hibernate.log"/>
- <layout class="org.apache.log4j.xml.XMLLayout"/>
- </appender>
- <appender name="CIPEJB" class="org.apache.log4j.FileAppender">
- <param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/cipejb.log"/>
- <layout class="org.apache.log4j.xml.XMLLayout"/>
- </appender>
- <logger name="net.sf.hibernate">
- <level value="INFO"/>
- <appender-ref ref="HIBERNATE" />
- </logger>
- <logger name="com.up.cip.ejb">
- <level value="INFO"/>
- <appender-ref ref="CIPEJB" />
- </logger>
- <root>
- <level value ="INFO" />
- <appender-ref ref="CON" />
- </root>
- </log4j:configuration>
notice:1。不需要在web.xml中写。只要保证你的log4.xml和log4j.jar都在类路经上就行了。
2。使用时只要在程序中写如下代码
Logger logger=Logger.getLogger(com.yourcompany);就得到了一个名为com.yourcompany的logger,然后记录时就调用类似logger.warn(logString)就行了。