Log4j 学习

Log4j有三个组件,分别是 loggersappenders and layouts。

 

Logger - 日志写出器 ,供程序员输出日志信息 
Appender - 
日志目的地 ,把格式化好的日志信息输出到指定的地方去 
Layout - 
日志格式化器 ,用来把程序员的 logging request 格式化成字符串

 

1.Loger

Loger name是大小写敏感的。Logger的定义遵循以下的规则:

 

例如:

the logger named "com.foo" is a parent of the logger named "com.foo.Bar".

"java" is a parent of "java.util" and an ancestor of "java.util.Vector".

RootLogger只能通过Logger.getRootLogger方法取得,非RootLogger通过Logger.getLogger(Name)取得。

Logger level有TRACE,DEBUG,INFO,WARN,ERROR andFATAL这几种,定义在org.apache.log4j.Level类里。

level的继承:

如果一个Logger没有声明level,那么它将继承自它的ancestor里离它最近的并且声明了level的ancestor的level。

继承规则:

 

[注]RootLogger必须声明一个Level。

 

Level级别:DEBUG < INFO < WARN < ERROR < FATAL。

 

如果getLogger()方法参数相同的话,将返回同一个Logger对象的引用。

例如:

Logger x = Logger.getLogger("wombat");

Logger y = Logger.getLogger("wombat");

x和y指向同一个Logger对象。

 

2.Appenders

一个Logger可以有多个appender。通过addAppender方法向Logger增加appender。

Each enabled logging request for a given logger will be forwarded to all the appenders in that logger as well as the appenders higher in the hierarchy. 

也就是说打印日志也具有继承性,子Logger在打印日志时,同时也会向它的祖先Logger的appender输出日志。

例如:如果RootLogger具有一个appender是Console,那么任何Logger都会向Console输出日志。

这是Log4j的默认行为,也可以通过设定additive 为false来改变默认行为。

日志输出的继承性规则如下:

 

3.Layout

根据配置信息格式化日志的输出信息。

Log4j 提供的 layout 有以下几种: 

             1.org.apache.log4j.HTMLLayout (以 HTML 表格形式布局), 

             2.org.apache.log4j.PatternLayout (可以灵活地指定布局模式),           

             3.org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串),
         4.org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息) 

Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下: 

             %p 输出优先级,即 DEBUG , INFO , WARN , ERROR , FATAL

             %r 输出自应用启动到输出该 log 信息耗费的毫秒数

             %c 输出所属的类目,通常就是所在类的全名

             %t 输出产生该日志事件的线程名

             %n 输出一个回车换行符, Windows 平台为 “rn” , Unix 平台为 “n”

             %m 输出代码中指定的消息

 

 

         %d 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在其后指定格式,比如: %d{yyy MMM dd HH:mm:ss,SSS} ,输出类似: 2002 年 10 月 18 日 22 : 10 : 28 , 921                                           

 

 

一个简单的log4j.properties 配置文件:

         %l  输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:  Testlog4.main(TestLog4.java:10)

 

 

由此可见,任何一个类都有一个Logger,如果想设定某个类或者某个包下所有类的日志级别,appender,可以单独对类或者包进行配置。

log4j.logger.类名/包名 = level,appender1,append2,.....

 

Log4j初始化顺序(The exact default initialization algorithm is defined as follows):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值