Log4j的使用

来源:互联网 发布:数据库工程师待遇知乎 编辑:程序博客网 时间:2024/06/18 10:24

import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;

今天又偶然用了一下log4j,不免有些生疏。所以贴出来总结一下:

首先Log4j需要准备一个configure文件:log4j.properties

文件格式:

# Configure the log dir and file names heremy.log.dir=./logmy.log.file=my.log# Define the root logger for deployment# This is the default level and appenderlog4j.rootLogger=INFO,my# Global Logging Thresholdlog4j.threshhold=ALL
#这里定义输出文件以及输出的样式## Daily Rolling File Appender for my#log4j.appender.my=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.my.File=${my.log.dir}/${my.log.file}# Rollover at midnightlog4j.appender.my.DatePattern=.yyyy-MM-dd# Output logs above INFO for this appenderlog4j.appender.my.Threshold=INFO log4j.appender.my.layout=org.apache.log4j.PatternLayout# Pattern format: Date LogLevel [ThreadName] LoggerName: LogMessagelog4j.appender.my.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %C: %m%n# Custom Logging levels# Only output ERRORs for other librarieslog4j.logger.org=ERROR# Output logs above INFO for ydrive
log4j.logger.somepackage=INFO
这里需要注意additivity,如果不写,那么就默认继承上面一个appender
log4j.additivity.somepackage.my=falselog4j.logger.somepackage.my=INFO,my

log4j.properties就是这样的格式。上面的意思除了输出文件和输出文件的格式大家基本都是一致的。对于下面怎么添加appender,每个人的写法就有区别了。如果

log4j.logger.somepackage=INFO,my
log4j.logger.somepackage.my=INFO,my
如果某个类somepackage.my.MyClass要输出log的话,那么在文件里就会输出相同的两行。原因就在于s
log4j.additivity.somepackage.my=false
omepackage.my不光是要打印自己的log,也要打印somepackage的log.所以才有

log4j.additivity.somepackage.my=false
这里就会抹掉sompackage的影响。

另外INFO,my代表输出等级是INFO和my 这个appender输出。至于my appender的定义。其实就是

log4j.appender.my


下面是代码里的写法:

加载log4j.properties很简单:

File log4jFile = new File("log4j.properties");System.out.println("Read log4j.propeties at" + log4jFile.getAbsolutePath());PropertyConfigurator.configureAndWatch(log4jFile.getAbsolutePath());

加载完之后,就可以使用log4j:

首先要import下面两个包

import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;

然后代码里可以这样写:

private static final Log LOG = LogFactory.getLog(MyClass.class);{     LOG.info("print");}

然后你就可以看到

# Configure the log dir and file names heremy.log.dir=./logmy.log.file=my.log
log目录的my.log里有你的print.

有时候,这个my.log很有可能是空的。原因在于还没有到log4j flush的时候,你可以多输出些东西。log4j是异步的输出。所以可能那个my.log是个空白。





	
				
		
原创粉丝点击