Log4j源码解析--框架流程+核心解析

本文介绍了Log4j的核心类,包括Logger、LoggerRepository、Level、LoggingEvent、Appender、Layout和ObjectRender。通过一个简单的日志记录序列图,解析了Log4j记录日志的过程,从获取Logger实例到日志信息写入指定位置。在实际运行中,当调用log方法时,会判断日志级别并创建LoggingEvent,接着由Appender进行格式化和输出。文章还提到,在使用Log4j时,通常在初始化时会获取静态常量log。
摘要由CSDN通过智能技术生成

OK,现在我们来研究Log4j的源码:

这篇博客有参照上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/06/28/381667.html。感谢作者的无私分享。


Log4J将写日志功能抽象成七个核心类或者接口:Logger、LoggerRepository、Level、LoggingEvent、Appender、Layout、ObjectRender。

我们一个一个来看:
1,Logger用于对日志记录行为的抽象,提供记录不同级别日志的接口;
public class Logger extends Category
{
// Logger继承Category,Category也是一种日志类
}
2,Appender是对记录日志形式的抽象;
public interface Appender
{
// Appender抽象成了接口,然后主要的实现是WriterAppender,常用的ConsoleAppender,FileAppender都继承了该类。
// 实际编码中经常会遇到DailyRollingFileAppender,RollingFileAppender都继承于FileAppender。
}
3,Layout是对日志行格式的抽象;
public abstract class Layout implements OptionHandler
{
// Layout抽象成一个模板,比较常用的PatternLayout,HTMLLayout都是该类子类
}
4,Level对日志级别的抽象;
public class Level extends Priority implements Serializable
{
// 该类封装一系列日志等级的名字和数字,然后内容封装多个等级的相关枚举
public final static int INFO_INT = 20000;


private static final String INFO_NAME = "INFO";
	
final static public Level INFO = new Level(INFO_INT, INFO_NAME, 6);
}
5,LoggingEvent是对一次日志记录过程中所能取到信息的抽象;
public class LoggingEvent implements java.io.Serializable
{
// 该类定义了一堆堆属性,封装了所有的日志信息。
}
6,LoggerRepository是Logger实例的容器
public interface LoggerRepository
{
// 常见的Hierarchy就是该接口实现,里面封装了框架一堆默认配置,还有Logger工厂。
// 可以理解该类就是事件源,该类内部封装了以系列的事件
}
7,ObjectRender是对日志实例的解析接口,它们主要提供了一种扩展支持。
public interface ObjectRenderer
{

	/**
	 * @创建时间: 2016年2月25日
	 * @相关参数: @param o
	 * @相关参数: @return
	 * @功能描述: 解析日志对象&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值