log4j,日志输出工具。(配置文件是properties,log4j.properties)
配置生成单独的文件。
1、加入一个logger,(log4j.logger.money=INFO, money)
默认的会有一个log4j.rootLogger=INFO,file,
在此加入一个
log4j.logger.money=INFO, money
解释:
log4j.logger.money中的money,是日志输出的名字。获取logger的时候,要用此名字
例子:private static Logger moneyLogger = Logger.getLogger("money");
INFO:输出的日志级别
money:对应的输出appender,下面会说到
2、加入appender(这里的配置,就不详细说明了,都是log4j的配置。)
log4j.appender.money=org.apache.log4j.DailyRollingFileAppender
log4j.appender.money.File=log/money.log
log4j.appender.money.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.money.layout=org.apache.log4j.PatternLayout
#log4j.appender.money.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
这里面的money,对应上面说的money
这里面,说一下log4j.appender.money.DatePattern='.'yyyy-MM-dd-HH这个配置,此处配置是日志生成文件的时间间隔。
'.'yyyy-MM-dd-HH这个,就表示,没小时生成一个。生成后,文件改名,以yyyy-MM-dd-HH这个时间格式,结尾。
log4j.appender.money.File=log/money.log :表示输出的文件名
此时。就已经完成日志的配置。
一个完整的配置
log4j.logger.money=INFO, money
log4j.appender.money=org.apache.log4j.DailyRollingFileAppender
log4j.appender.money.File=log/money.log
log4j.appender.money.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.money.layout=org.apache.log4j.PatternLayout
#log4j.appender.money.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
假如有多个文件要输出。就配置多个,比如(有点麻烦,求更好的方法)
log4j.logger.money=INFO, money
log4j.logger.pve=INFO, pve
log4j.logger.build=INFO, build
log4j.appender.money=org.apache.log4j.DailyRollingFileAppender
log4j.appender.money.File=log/money.log
log4j.appender.money.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.money.layout=org.apache.log4j.PatternLayout
#log4j.appender.money.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
log4j.appender.pve=org.apache.log4j.DailyRollingFileAppender
log4j.appender.pve.File=log/pve.log
log4j.appender.pve.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.pve.layout=org.apache.log4j.PatternLayout
#log4j.appender.pve.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
log4j.appender.build=org.apache.log4j.DailyRollingFileAppender
log4j.appender.build.File=log/build.log
log4j.appender.build.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.build.layout=org.apache.log4j.PatternLayout
#log4j.appender.build.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
注意:打印日志时,要用对应的方法获取。
private static Logger moneyLogger = Logger.getLogger("money");
private static Logger pveLogger = Logger.getLogger("pve");
private static Logger buildLogger = Logger.getLogger("build");
此时,日志就修改完毕了。
下面的是,我没有测试的。log4j的优化
1)log4j.additivity.money=false(亲测,可用,必加)log4j.logger.money=INFO, money,跟这个对应。
这个选项用于控制监控logger的日志不会输出到rootlogger,否则无论会产生许多重复的数据,同时也会影响性能;
2)以缓存的形式输出。(未测试。)
log4j.appender.money.BufferedIO=true
log4j.appender.money.BufferSize=8192
这 个选项用于告诉log4j输出日志的时候采用缓冲的方式,而不是即时flush方式,并且设定了缓冲为8K,8K是默认值,可以根据日志输出的情况来修 改。这个选项很重要,在测试中发现,当并发访问很高,例如每一秒100个并发以上,使用缓存跟不使用缓冲差距很大。具体数字我这里就不列出来了。
另外我想说的是,log4j输出缓冲日志是以8K为单位的,因为磁盘的一个block为8K,这样可以减少碎片,也就是说假设你设置缓存为18K,log4j在16K(8K*2)的时候就会输出),而不是18K。
3)异步方式配置。(自行百度。此方法必须用xml配置。未测试)