简介
Log4j是一个由Java编写可靠、灵活的日志框架,是Apache旗下的一个开源项目;
使用Log4j,我们更加方便的记录了日志信息,它不但能控制日志输出的目的地,也能控制日志输出的内容格式;通过定义不同的日志级别,可以更加精确的控制日志的生成过程,从而达到我们应用的需求;这一切,都得益于一个灵活的配置文件,并不需要我们更改代码。
在mvnrepository.com/中可以查到,log4j1从2005年11月更新到2012年3月,后面就没再更新了,最新的依赖(May 26, 2012)
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
复制代码
2015年8月5日,项目管理委员会宣布Log4j 1.x已达到使用寿命。建议用户使用Log4j 1升级到Apache Log4j 2
log4j架构
- 核心对象: 框架的强制对象和框架的使用。core Objects
- 支持对象: 框架和支持体核心对象,可选的对象执行另外重要的任务。Support Objects
支持对象
- Level对象:级别对象定义的任何记录信息的粒度和优先级。有记录的七个级别在API中定义:OFF, DEBUG, INFO, ERROR, WARN, FATAL 和 ALL
- Filter对象:过滤对象用于分析日志信息及是否应记录或不用这些信息做出进一步的决定。一个appender对象可以有与之关联的几个Filter对象。如果日志记录信息传递给特定Appender对象,都和特定Appender相关的Filter对象批准的日志信息,然后才能发布到所连接的目的地。
- 对象渲染器:ObjectRenderer对象是一个指定提供传递到日志框架的不同对象的字符串表示。这个对象所使用的布局对象来准备最后的日志信息。
- 日志管理:日志管理对象管理的日志框架。它负责从一个系统级的配置文件或配置类读取初始配置参数。
核心对象
Logger、Appender、Layout
Log4j中有三个主要组成部分
Logger:日志对象,负责捕捉日志记录信息
Logger对象是用来取代System.out或者System.err的日志输出器,负责日志信息的输出;其中,log4j日志框架提供了info、error、debug等API供Developer使用;
与commons-logging相同,log4j也有日志等级的概念;每一个logger对象都会分配一个等级,未被分配等级的logger则继承根logger的级别,进行日志的输出;每个日志对象方法的请求也有一个等级,如果方法请求的等于大于当前logger对象的等级,则该请求会被处理输出,否则该请求被忽略;
log4j在Level类中定义了7个等级,以此递增
- ALL:打开所有日志;
- DEBUG:适用于代码调试期间;
- INFO:适用于代码运行期间;
- WARN:适用于代码会有潜在错误事件;
- ERROR:适用于代码存在错误事件;
- FATAL:适用于严重错误事件;
- OFF:关闭所有日志;
Appender:日志输出目的地,负责把格式好的日志信息输出到指定地方,可以是控制台、磁盘文件等
每个日志对象,都有一个对应的appender,每个appender代表着一个日志输出目的地;其中,log4j有以下几种appender可供选择:
- ConsoleAppender:控制台;
- FileAppender:磁盘文件;
- DailyRollingFileAppender:每天产生一个日志磁盘文件;
- RollingFileAppender:日志磁盘文件大小达到指定尺寸时产生一个新的文件;
Layout:日志格式化器,负责发布不同风格的日志信息
每个appender和一个Layout相对应,appende负责把日志信息输出到指定的地点,而Layout则负责把日志信息按照格式化的要求展示出来;其中,log4j有以下几种Layout可供选择:
- HTMLLayout:以html表格形式布局展示;
- PatternLayout:自定义指定格式展示;
- SimpleLayout:包含日志信息的级别和信息字符串;
- TTCCLayout:包含日志产生的时间、线程、类别等等信息;
示例
创建maven项目,学习log4j。
pom.xml添加依赖
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
复制代码
测试类 Log4jTest
public class Log4jTest {
Logger logger = Logger.getLogger(Log4jTest.class);
@Test
public void test() {
logger.fatal("Fatal Message!");
logger.error("Error Message!");
logger.warn("Warn Message!");
logger.info("Info Message!");
logger.debug("Debug Message!");
logger.trace("Trace Message!");
}
}
复制代码
没有配置文件怎么样,看一下执行结果
log4j:WARN No appenders could be found for logger (cn.lingyiwin.logs.Log4jTest).
警告无法为记录器找到附加器
log4j:WARN Please initialize the log4j system properly.
警告:请正确初始化log4j系统
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
警告见http://logging.apache.org/log4j/1.2/faq.html#noconfig获取更多信息
Process finished with exit code 0
复制代码