OK,现在我们认真的研究下Logger的配置,进行相关配置扩展。
Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局)。其中,Logger负责记录日志,Appender负责输出到什么地方,Layout负责以什么格式输出,输出哪些附加信息等。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。
- Log4J三个核心概念
公共接口 Appender 负责控制日志记录的输出。
公共抽象类 Layout 负责格式化Appender的输出
Logger日志记录器是日志处理的核心组件。现在我们来认真的整理下这个组件。Logger就是Java代码中的logger,例如:
public static Logger log = Logger.getLogger(Log4jTest.class);
Logger是有名字的,它的名字便是Logger.getLogger()方法的参数。如果参数为所在的类,Log4j会去类名作为logger的名称,比如org.linkinpark.commons.logtest.Log4jTest。
Loggers组件在此系统中被分为五个级别:TRACE→DEBUG→INFO→WARNING→ERROR→FATAL→OFF。等级高的level自动屏蔽等级低的level,这点一定要记住。
这里Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。
注意以下几点:
1,Logger为单态模式,相同名字的logger只会有一个实例。如果在构建一个同名的Logger,log4j会返回之前的Logger实例。
2,一般情况下都以类名作为Logger的名称。Logger的名字类似于Java中的Package,大小写敏感,用点分开且具有继承关系。log4j.properties中通过名称来配置Logger的属性。
3,在对Logger实例进行命名时,没有限制,可以取任意自己感兴趣的名字。一般情况下建议以类的所在位置来命名Logger实例,这是目前来讲比较有效的Logger命名方式。这样可以使得每个类建立自己的日志信息,便于管理。
4,Log4j中有一个根记录器rootLogger,它是所有Logger的父类。
- logger的配置