蒙田说过一句像老子说的话:我们做事情需要工具,而为了验证工具有效我们又需要一些方法,为了验证方法有效我们又需要工具......我在使用log4j的时候就陷入了这种困境
刚开始碰到的问题是eclipse+tomcat后错误信息无法在eclipse上显示,于是同事指点独立tomcat,可根据前一个bug,system.out.prinln的数据又无法显示,于是我又苦苦的学习log4j(请原谅我,我真的花了大量时间),后来又发现log4j的使用也出现了问题:在我使用了log4j后,很多jar里的信息也出来了,于是我又琢磨了怎么独立自己的log
再然后我发现一件诡异的事情,那就是我改了配置文件,却一直没有生效,我重启tomcat,eclipse,甚至重启了windows
后来才明白我的配置文件自相矛盾
log4j.logger.Qbit= DEBUG, debugfile #log4j.additivity.Qbit = false log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender log4j.appender.debugfile.File = d:/logs/dubug.log log4j.appender.debugfile.Append = true #log4j.appender.debugfile.Threshold = DEBUG log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout log4j.appender.debugfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %p ] - [%l:%r ] %m%n log4j.logger.Qbit= warn, errinfo #log4j.additivity.Qbit = false log4j.appender.errinfo = org.apache.log4j.DailyRollingFileAppender log4j.appender.errinfo.File = d:/logs/warn.log log4j.appender.errinfo.Append = true log4j.appender.errinfo.Threshold = warn log4j.appender.errinfo.layout = org.apache.log4j.PatternLayout log4j.appender.errinfo.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %p ] - [%l:%r ] %m%n原意是想建立两个文件分别来存放debug和warn,结果二者矛盾,于是前面的(或者是更低级的?)debug被忽略了
正确的做法是去掉
log4j.logger.Qbit= warn, errinfo
使用log4j.appender.errinfo.Threshold = warn
即可
后来还发现可以将多个类的信息输入到同一个文件,不过似乎没啥用
最后贴一个吧
#该文件名需要为log4j.properties,在src目录下,需导入两个jar包(哪两个?亲,你懂的) ### set log levels ### log4j.rootLogger = debug , stdout ### 输出到控制台 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %m%n ### 输出到日志文件 ### log4j.logger.Qbit= DEBUG, debugfile log4j.additivity.Qbit = false log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender log4j.appender.debugfile.File = d:/logs/Qbit/dubug.log log4j.appender.debugfile.Append = true log4j.appender.debugfile.Threshold = DEBUG log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout log4j.appender.debugfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %p ] - [%l:%r ] %m%n log4j.additivity.Kamputer = false log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender log4j.appender.debugfile.File = d:/logs/Qbit/dubug.log log4j.appender.debugfile.Append = true log4j.appender.debugfile.Threshold = DEBUG log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout log4j.appender.debugfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %p ] - [%l:%r ] %m%n #level: #FATAL 0 #ERROR 3 #WARN 4 #INFO 6 #DEBUG 7 #appender #org.apache.log4j.ConsoleAppender(控制台), #org.apache.log4j.FileAppender(文件), #org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), #org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), #org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) #Layout #org.apache.log4j.HTMLLayout(以HTML表格形式布局), #org.apache.log4j.PatternLayout(可以灵活地指定布局模式), #org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), #org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) #打印参数 #%m 输出代码中指定的消息 #%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL #%r 输出自应用启动到输出该log信息耗费的毫秒数 #%c 输出所属的类目,通常就是所在类的全名 #%t 输出产生该日志事件的线程名 #%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” #%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921 #%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )