log4j源码解析

本文详细解析了log4j的核心组件,包括Logger、Appender、Layout及其工作原理。介绍了日志级别,如error、warn、info、debug等,并解释了如何通过源码分析log4j的配置加载过程。同时,探讨了RollingFileAppender的日志备份策略,以及SSH与log4j整合的优势,如动态改变日志级别和路径配置。
摘要由CSDN通过智能技术生成
(一)几个基本概念

Logger - 日志写出器,供程序员输出日志信息
Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去
ConsoleAppender - 目的地为控制台的Appender
FileAppender - 目的地为文件的Appender
RollingFileAppender - 目的地为大小受限的文件的Appender
Layout - 日志格式化器,用来把程序员的logging request格式化成字符串
PatternLayout - 用指定的pattern格式化logging request的Layout

日志级别

每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:
A:off         最高等级,用于关闭所有日志记录。
B:fatal       指出每个严重的错误事件将会导致应用程序的退出。
C:error      指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm     表明会出现潜在的错误情形。
E:info         一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug     一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all           最低等级,用于打开所有日志记录。

上面这些级别是定义在org.apache.log4j.Level类中。Log4j只建议使用4个级别,优先级从高到低分别是 error,warn,info和debug。通过使用日志级别,可以控制应用程序中相应级别日志信息的输出。例如,如果使用了info级别,则应用程 序中所有低于info级别的日志信息(如debug)将不会被打印出来。

 

(二)源码解析

 

基本步骤:

1、LogManager类对log4j.xml或者log4j.properties文件进行解析(xml文件优先,若存在xml文件则不对properties文件进行解析)

 

2、逐个解析配置文件中的logger对象,并将这些对象放入一个Hierarchy的实例中(Hierarchy类中定义了一个hashtable来存储所有的logger)

      a、取得RootLogger

      b、取得RootLogger对应的Appender (必须在配置文件中指明rootLogger的Appender)

      c、取得Appender的Layout,将Layout追加到Appender中 

      d、将Appender追加到RootLogger中

      e、将RootLogger添加进Hierarchy中

      f、依照上面abcde的步骤将其他logger添加进Hierarchy中

 

3、通过LogManager.getLogger(String name)或LogManager.getLogger(Class clazz)获取获取到指定的logger对象(事实上,传递进去的clazz也会被转换为字符串,不过要加上它的包名,如Test.Class-->com.test.Test)

      a、通过传递进来的参数,判断Hierarchy中是否已经含有此logger;(通过hashtable.get(key)获取再判断)

      b、若该logger已经存在于Hierarchy中则将Hierarchy的logger返回

      c、通过new Logger(String name)或new Logger(Class clazz)创建一个新的logger,设置这个logger的parent属性,将此对象放入Hiera

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值