Log4j用法
将Log4j和commons.logging的jar包加到构建路径中(classpath),我出现过这么一个问题javaEE5自带的commons.logging不可用后来发现路径应修改为:
import
org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory;
。
然后写一个log4j.properties 文件放在根路径。
log4j.properties 文件完整的示例如下:
##定义rootLogger,级别为DEBUG,输出地为stdout
log4j.rootLogger=DEBUG,stdout
##定义用于记录错误信息的Logger:ErrorLog
log4j.logger.ErrorLog=ERROR , errLog
##定义用于记录业务信息的Logger:BusinessLog
log4j.logger.BusinessLog=INFO, businessLog
##
设置
stdout ##
log4j.appender. stdout =org.apache.log4j.ConsoleAppender
##输出到控制台
log4j.appender.stdout.Target=System.out
##设置为灵活的布局模式。
log4j.appender. stdout.layout=
org.apache.log4j.PatternLayout
##设置转换模式。类似于C中输出函数(printf())中的转换模式。
log4j.appender. stdout.layout.ConversionPattern=%r [%t] %-5p %C.%M() - %m%n
##
设置
errLog ##
##指定Appender 名称为errLog,并且每天产生一个日志文件。
log4j.appender.errLog= org.apache.log4j.DailyRollingAppender
##指定输出地为文件error.log
log4j.appender.errLog.file=error.log
##指定日期格式
log4j.appender.errLog.DatePattern=’.’yyyy-MM-dd
log4j.appender.errLog.layout=org.apache.log4j.PatternLayout
log4j.appender.errLog.ConversionPattern= %p -- %d{yyyy-MM-dd HH:mm:ss,SSS} - %c – Method:%m%n
##
设置
businessLog ##
##指定Appender 名称为businessLog,并且每天产生一个日志文件。
注:
# 为注释符号
可见log4j中有三种组件 Logger, Appender 和 Layout。详细解释如下.
Logger:
定义的格式:
log4j.[loggername]=[level], appenderName1, appenderName2
level 是日至的级别 DEBUG<INFO<WARN<ERROR<FATAL
如果定义级别为ERROR,则只有级别比它高的才会执行,即:执行FATAL,当然也包括指定的级别,即 ERROR。
appenderNamex 是日志的输出地。由后面的Appender定义。
ex:
定义rootLogger,级别为DEBUG
log4j.rootLogger=DEBUG
定义用于记录错误信息的Logger:ErrorLog
log4j.logger.ErrorLog=ERROR , errLog
定义用于记录业务信息的Logger:BusinessLog
log4j.logger.BusinessLog=INFO, businessLog
Appender:
org.apache.log4j.ConsoleAppender 控制台
org.apache.log4j.FileAppender 文件
org.apache.log4j.DailyRollingAppender 每天产生一个日志文件
org.apache.log4j.RollingFileAppender 文件到达指定大小时产生一个新的文件
org.apache.log4j.ConsoleAppender 将日志信息以流的方式发送到任意指定地方
定义格式:
log4j.appender.appenderName=上述的类名
log4j.appender.appenderName.option1=value1
……..
log4j.appender.appenderName.optionN=valueN
以此类推。
ex:
指定Appender 名称为errLog,并且每天产生一个日志文件。
log4j.appender.errLog=org.apache.log4j.DailyRollingAppender
指定输出地为文件error.log
log4j.appender.errLog.
file=error.log
指定日期格式
log4j.appender.errLog.DatePattern=’.’yyyy-MM-dd
指定Layout,有关设置见Layout
log4j.appender.errLog.layout=org.apache.log4j.PatternLayout
Layout:
org.apache.log4j.HTMLLayout 用HTML表格的形式布局
org.apache.log4j.PatternLayout 可以灵活的指定布局
org.apache.log4j.SimpleLayout 包含是指信息的级别和信息字符串
org.apache.log4j.TTCCLayout 包含日志产生的时间,线程,类别的信息
常用的为 PatternLayout .
定义格式
log4j.appender.appenderName.layout=上述类名
log4j.appender.appenderName.option1=value1
…….
log4j.appender.appenderName.optionN=valueN
ex:
设置为灵活的布局模式。
log4j.appender.errLog.layout=org.apache.log4j.PatternLayout
设置转换模式。类似于C中输出函数(printf())中的转换模式。
log4j.appender.errLog.ConversionPattern= %p -- %d{yyyy-MM-dd HH:mm:ss,SSS} - %c – Method:%m%n
转换模式常用参数:(详细信息参见Log4j Conversion Pattern )
%p 日志信息的级别
%d 日志信息产生的时间
%c 日志信息所在类名
%m日志的具体信息
%n 输出一个换行符
Apache 通用日志包
Log4j 仅仅是 Apache 通用日志包的一种实现。
要在代码中使用它还要借助 Apache 通用日志包。
前面日志的级别是在Apache 通用日志包定义的。并由日志实现指定级别(如:log4j.properties中指定)
。
FATAL 非常严重的错误,导致系统中止。
ERROR 其他运行时的错误。
WARN 警告
INFO 有意义的信息
DEBUG 系统运行时更加详细的信息
TRACE 更加详细的信息
在代码中,通常以下列方式使用:
//通过
org.apache.commons.logging.LogFactory接口静态方法
//public static void getLog(String name)
//或
//public static void getLog(Class class)
//取得o
rg.apache.commons.loggin.Log 对象。
Log logger=LogFactory.getLog(String name ) //指定Logger的Name
//Log logger=LogFactory.getLog(Class class) //指定的类,用 ClassName.class ,如:PeclinicDAO.class
//记录日志信息
logger.fatal(Object msg)
logger.fatal(Object msg, Throwable t)
logger.error(Object msg)
logger.error(Object msg, Throwable t)
其他类似。
Log接口的一组方法可以判断允许的日志级别
logger.isFatalEnabled()
logger.isErrorEnabled()
logger.isWarnEnabled()
其他类似。
代码示例:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public
class HelloWorld{
pirvate static final Log logger=LogFactory.getLog(HelloWorld.class)
public void sayHello(String greet){
if(logger.isInfoEnabled()){
logger.info(greet);
}// end if
}
// end sayHello
}
// end HelloWorld