这篇文章写了好久了,扔在yunio的盘子里面忘记了。。。

引言

之前一直不重视的log文件现在终于让人受不了了,debug一堆的遗留的stdout,郁闷啊。好不容易清理完了自己写的sysout,引入了commons.httpclient之后我彻底崩溃了。反正正要做商城的log,还是好好研究一下吧。 看了一下项目引用的库。好多个log的库。google一下还有个叫logback的。

  • java.util.logging
  • org.apache.log4j
  • org.apache.commons.logging
  • org.slf4j
  • logback

** 这个咋办呢??? **

这些都是啥:

算了我用的库里面用得最多的就是log4j了,就用这个吧。

log4j的配置文件

先贴一下我现在的配置文件吧。

# Set log levels # 这里设置rootlogger的level和appender
log4j.rootLogger = DEBUG, Console, LogFile, ErrorFile

# Output the log info to the Java Console #
log4j.appender.Console = org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target = System.out
log4j.appender.Console.ImmediateFlush = true
log4j.appender.Console.Threshold = DEBUG
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern = <%-d{yyyy-MM-dd HH:mm:ss}> <%t> %l %n<%p> %m%n%n

# Save the log info to the log file #
log4j.appender.LogFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.LogFile.File = logs/log.log
log4j.appender.LogFile.Append = true
log4j.appender.LogFile.ImmediateFlush = false
log4j.appender.LogFile.Threshold = INFO
log4j.appender.LogFile.layout = org.apache.log4j.PatternLayout
log4j.appender.LogFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} <%c> %l %n<%p> %m%n%n

# Save the error info to the error file. A file one day. #
log4j.appender.ErrorFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.ErrorFile.File = logs/error.log
log4j.appender.ErrorFile.Append = true
log4j.appender.ErrorFile.ImmediateFlush = false
log4j.appender.ErrorFile.Threshold = ERROR
log4j.appender.ErrorFile.layout = org.apache.log4j.PatternLayout
log4j.appender.ErrorFile.layout.ConversionPattern 

# 自定义一个appender
log4j.logger.test = DEBUG, test, Console
# 不继承父log的配置,可以使得这个appender不输出到root
log4j.additivity.test = false
log4j.appender.test = org.apache.log4j.DailyRollingFileAppender
log4j.appender.test.File = logs/main.log
log4j.appender.test.Append = true
log4j.appender.test.ImmediateFlush = true
log4j.appender.test.Threshold = INFO
log4j.appender.test.layout = org.apache.log4j.PatternLayout
log4j.appender.test.layout.ConversionPattern = <%-d{yyyy-MM-dd HH:mm:ss}> <%t> %l <%p> %m%n

第三方库的log

第三方库的log是一件比较麻烦的事情,作者都是大牛啊。总是有与众不同的想法,像spymemcached就自己做了一个log,幸好这位大牛还是对我们这些码农比较友好的。可以改为自己想用的log。具体如下:

Properties systemProperties = System.getProperties();
systemProperties.put("net.spy.log.LoggerImpl", "net.spy.memcached.compat.log.Log4JLogger");
//systemProperties.put("net.spy.log.LoggerImpl", "net.spy.memcached.compat.log.SunLogger");
System.setProperties(systemProperties);

如果你跟我一样还用couchbase的话,在log4j的配置文件的最后加上:

log4j.looger.com.couchbase.client = ERROR
log4j.additivity.com.couchbase.client = false

httpclient这个库的log,分了3个,而且不是继承的,所以要分开关:

log4j.logger.httpclient.wire.header=INFO
log4j.logger.httpclient.wire.content=INFO
log4j.logger.org.apache.commons.httpclient = INFO

怎样把配置文件放在包的外面

请看我另外一篇文章《log4j怎样把配置文件放在包外》