Log4J配置
2008/12/02
一.log4j简介
简单的说log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就
是可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。
Log4j除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息。程序员经常会遇到脱离java ide环境调试程序的情况,这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些垃圾语句注释掉。若哪天又需调试变量值,则只能再一行行去掉这些注释恢复System.out.println语句。使用log4j可以很好的处理类似情况。
二.log4j使用方法
1、定义配置文件
首先使用配置文件将使我们的应用程序更加灵活配置log日志输出方式包括输出优先级、输出目的地、输出格式。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法:
1、配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName,
其中,level是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR>WARN>INFO>DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。
举例:log4j.rootCategory=INFO,stdout,Runlog,Errorlog日志类别为INFO,DEBUG将被屏蔽,其他的将被输出。stdout,Runlog,Errorlog分别为3个输出目的地。
2、常用输出格式
-X号:X信息输出时左对齐;%p:日志信息级别%d{}:日志信息产生时间%c:日志信息所在地(类名)%m:产生的日志具体信息%n:输出日志信息换行
举例:log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %nlog4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %nlog4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
3.目的地
配置日志信息输出目的地Appender,其语法为log4j.appender.appenderName = fully.qualified.name.of.appender.classlog4j.appender.appenderName.option1 = value1...log4j.appender.appenderName.option = valueNappenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
log4j支持的输出目的地:org.apache.log4j.ConsoleAppender控制台org.apache.log4j.FileAppender文件org.apache.log4j.DailyRollingFileAppender每天产生一个日志文件org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)org.apache.log4j.net.SMTPAppender邮件org.apache.log4j.jdbc.JDBCAppender数据库其他如:GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等
举例:输出到控制台log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender(指定输出到控制台)log4j.appender.Threshold=DEBUG(指定输出类别)log4j.appender.CONSOLE.Target=System.outlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout(指定输出布局)log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定输出格式)
输出到文件(轮换"日志文件",当日志文件达到指定大小时,该文件就被关闭并备份,然后创建一个新的日志文件)
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender(指定输出到文件)log4j.appender.ROLLING_FILE.Threshold=ERROR(指定输出类别)log4j.appender.ROLLING_FILE.File=D:logsrolling.log(指定输出的路径及文件名)log4j.appender.ROLLING_FILE.MaxFileSize=10KB(指定输出到文件的大小)log4j.appender.ROLLING_FILE.MaxBackupIndex=1*log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout(指定采用输出布局) log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定采用输出格式)
2.在要输出日志的类(Hello.java)中加入相关语句:
1、导入所有需的commongs-logging类:import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员:private final Log log = LogFactory.getLog(getClass());LogFactory.getLog()方法的参数使用的是当前类的class。例如:hello.class
3.然后在方法中记录日志:
if (log.isInfoEnabled()){log.info("welcome");}
问题:利用spring框架编程,consol:::e打印出log4j:WARN Please initialize the log4j system properly?
解决:说明你的log4j.properties没有配置。请把log4j.properties放到工程的classpath中,eclipse的classpath为bin目录,由于编译后src目录下的文件会拷贝到bin目录下,所以你可以把log4j.properties放到src目录下。
*当存储的文件数目超过maxBackupIndex+1时,会删除最早生成的文件,保证整个文件数目等于maxBackupIndex+1。