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