读书人

Log4j 日记框架入门

发布时间: 2012-07-25 09:43:05 作者: rapoo

Log4j 日志框架入门
1
讨论组:
log4j-user@jakarta.apache.org
ceki@apache.org

2
主页
http://jakarta.apache.org/log4j

3
使用:
3.1 配置Log4j

3.1.1

BasicConfigurator.configure();


3.1.2
log4j.properties

3.2 在类中创建 Logger.

HelloWorld.java

package cn.bisosft.component.log.log4j.demo;import org.apache.log4j.BasicConfigurator;import org.apache.log4j.Logger;public class HelloWorld{    private static Logger logger = Logger.getLogger("cn.bisosft.component.log.log4j.demo.HelloWorld");    static public void main(String[] args)    {        BasicConfigurator.configure();        logger.debug("Hello world.");    }}


3.3 使用logger 输出信息.
3.3.1 支持的方法:
debug()
info()
warn()
error()
fatal()
log()

4.
Log4j 架构

4.1 Log4j 包括三个组件:
Logger
Appender
Layout

4.2 Logger 层次体系结构

4.2.1 RootLogger 根记录器:

4.2.1.1 它总是存在, 可以通过
Logger.getRootLogger() 获取.

4.2.1.2 它的级别不能设置为空.

4.2.1.3 不能通过名字获取它.

4.2.2 所有其它 Logger 必须在所属类中通过 getLogger() 来获取实例.

4.2.3 Named Hierarchy Rule 层次命名规则(继承关系):
log4j.logger.cn.bisoft=DEBUGlog4j.logger.cn.bisoft.component=DEBUG

上面的代码说明:
log4j.logger.cn.bisoft 是 父Logger,
log4j.logger.cn.bisoft.component 是 子Logger.

4.3
级别/优先级

优先级从低到高:

ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF.

log() 可指定级别,输出消息

4.3.2
输出异常堆栈:
logger.debug(String msg, Throwable e)
logger.fatal(String msg, Throwable e)
logger.error(String msg, Throwable e)
logger.fatal(String msg, Throwable e)

常见错误:
很多人使用
logger.error(e) 或 logger.error(e.getMessage()), 这个不会 print 异常堆栈的, 应该使用
logger.error("exception information!", e)

e.getMessage() 这个方法最好不要使用, 它输出的信息是很少的, 不利于调试.


4.3.3 Logger 控制输出消息级别
rootLogger=INFO
x=NONE
x.y=DEBUG
x.y.z=NONE

则它的的影响范围:
rootLogger INFO
x INFO
x.y DEBUG
x.y.z DEBUG

注意: Logger 消息级别默认取自己的,若没有配置则向上(祖先/父亲)搜索第一个非空的Logger 的级别.

4.3.4 logger 过滤器
Logger 只会记录优先级 >= 当前级别的消息, 低于此级别的消息将 drop 掉.

4.3.4 Hierarchy-wide Threshold Filter 全局范围Logger过滤器
它的优先级高于所有的Logger, 是总开关.默认为ALL,不过滤任何消息.

设置:
LoggerRepository repository = x.getLoggerRepository();// Set the hierarchy-wide threshold to WARN effectively disabling// all INFO and DEBUG requests.repository.setThreshold(Level.WARN);



5
Appender

表示输出目的地, 一个Logger 可以有多个目的地.

5.1
console
file
Swing component
remote socket server
JMS
NT Event Logger NT事件记录器
Remote UNIX Syslog daemon 远程UNIX系统日志守护进程

5.2
支持异步输出.

5.3
默认行为:
logger 获取自己的Appender及向上获取 所有 的Appender, 向他们发送消息.

5.4
Appender Additivity Rule: Appender的可加性规则

若 Logger 的父 Logger 的Additivity标志为 false, 则
logger 获取自己的Appender及向上获取直到遇到 父 Logger(包括父 Logger) 所有 的Appender, 向他们发送消息.



6
Layout

输出消息格式控制

PatternLayout

c输出日志事件信息C输出完全限定类名d输出日期p输出日志级别r输出消息输出时间t 输出线程名F输出文件名l输出调用信息L 输出行号m 输出消息M 输出方法名n换行xOutputs the NDC (nested diagnostic context) associated with thethread that generated the logging event.XOutputs the MDC (mapped diagnostic context) associated with thethread that generated the logging event.%%%输出%填充:%20 左填充%-20 右填充裁剪:%.20 超过20个字符,从左边裁剪.


7
配置文件示例:

log4j.properties

################################################### Log4j 配置模板################################################### log4j.rootLogger=[level], [appenderName1, appenderName2, ...]# 配置RootLogger级别, 及Appender列表.log4j.rootCategory=DEBUG, CONSOLE, LOGFILE# log4j.threshold=[level]# 配置全局消息过滤器log4j.threshold=ALL# 包消息级别log4j.logger.org.hibernate=INFOlog4j.logger.cn.bisoft=DEBUGlog4j.logger.cn.bisoft.component=DEBUG# CONSOLE settings.log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.Threshold=ERRORlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS} [%-5p] %c - %m%n# LOG FILE settings.log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppenderlog4j.appender.LOGFILE.Append=truelog4j.appender.LOGFILE.File=log/debug.loglog4j.appender.LOGFILE.MaxFileSize=10MBlog4j.appender.LOGFILE.MaxBackupIndex=5log4j.appender.LOGFILE.File.DatePattern='.'yyyy-MM-dd-HH-mm-sslog4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.LOGFILE.layout.ConversionPattern=[%d{mm:ss.SSS}] |  %-5p | %-20C{1}.%-20M(L: %-4L) | %-50m |  (%r ms)%n# 输出消息编码log4j.appender.LOGFILE.encoding=UTF-8
















读书人网 >开源软件

热点推荐