log4j,简单的说就是用于在应用程序中打印日志的工具,目前除了支持java外,还有C,C++,C#,Perl,Ruby等版本。这里只是简单的讨论下java中log4j。
log4j主要有三个组件,分别是Loggers,Appenders和Layouts。三个组件都带了s,显示是复数。Logger相当于记录器,它控制着打印什么样的信息,这些信息被分成了6个控制级别,分别是Trace,Debug,Info,Warn,Error和Fatal。通常情况下每个Logger都有与之对应的名称,用静态方法getLogger()来获得当前Logger,一种习惯的做法是Logger.getLogger(Object.class)。Logger之所以成为带Loggers,其之一是我们可以通过静态方法获取任意多个Logger;之二是Logger存在继承关系,一种依赖与它们名称的继承关系,比如Logger("com.foo")就是Logger("com.foo.a")的父亲,这中继承关系使得没有设定控制级别的子Logger拥有父Logger的控制级别。
Appender描述log输出的目的地,log的Appedner可以是console,file,GUI components,JMS等等,也可以定制自己Appender通过继承AppenderSkeleton类来实现。一个Logger可以有多个Appender,由于Logger的继承关系,同样使得子Logger拥有父Logger的Appender,同时还可以拥有自己的Appender。
Layout描述了log输出的格式,主要用到的类是,这个类里面定义关于转换输出格式用到的一些描述符。
关于怎么使用log4j
log4j为了简化开发提供了配置模式,配置文件可以是XML格式或者properties格式(key=value)。一个简单propterty格式配置文件(log4j.properties):
- # Set root logger level to DEBUG and its only appender to stdout and R. log4j.rootLogger=DEBUG, stdout,R
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- # Pattern to output the caller's file name and line number.
- log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
- log4j.appender.R=org.apache.log4j.RollingFileAppender
- log4j.appender.R.File=example.loglog4j.appender.R.MaxFileSize=100KB# Keep one backup filelog4j.appender.R.MaxBackupIndex=1
- log4j.appender.R.layout=org.apache.log4j.PatternLayout
- log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
# Set root logger level to DEBUG and its only appender to stdout and R. log4j.rootLogger=DEBUG, stdout,Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout# Pattern to output the caller's file name and line number.log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%nlog4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File=example.loglog4j.appender.R.MaxFileSize=100KB# Keep one backup filelog4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
一个简单的XML格式配置文件(log4j.xml):
- <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
- <appender name="Console" class="org.apache.log4j.ConsoleAppender">
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%m%n" />
- </layout>
- </appender>
- <appender name="rollingFileAppender" class="org.apache.log4j.RollingFileAppender">
- <param name="File" value="TEST.log" />
- <param name="Append" value="true" />
- <param name="MaxBackupIndex" value="10" />
- <param name="MaxFileSize" value="512000KB"/>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
- </layout>
- </appender>
- <logger name="com.test">
- <level value ="DEBUG"/>
- <appender-ref ref="fileAppender"/>
- </logger>
- </log4j:configuration>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <appender name="Console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n" /> </layout> </appender> <appender name="rollingFileAppender" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="TEST.log" /> <param name="Append" value="true" /> <param name="MaxBackupIndex" value="10" /> <param name="MaxFileSize" value="512000KB"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%p (%c:%L)- %m%n" /> </layout> </appender> <logger name="com.test"> <level value ="DEBUG"/> <appender-ref ref="fileAppender"/> </logger> </log4j:configuration>
在code里,使用PropertyConfigurator.configure(configFileUrl&str) 来加载相应的配置文件。另外,log4j还提供了一个最基本配置BasicConfigurator.configure(),这个简单的配置使用console appender,layout格式为 "%-4r [%t] %-5p %c %x - %m%n"。也可以使用java property来设置log4j.properties这个配置文件:java.property.log4j.configuration=file:/d:/log4j.properties。