提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
1.日志框架
日志接口(slf4j)
slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback)
日志实现(log4j、logback、log4j2)
-
log4j是apache实现的一个开源日志组件
-
logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现
-
log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活。
2.为什么需要日志接口,直接使用具体的实现不就行了吗?
接口用于定制规范,可以有多个实现,使用时是面向接口的(导入的包都是slf4j的包而不是具体某个日志框架中的包),即直接和接口交互,不直接使用实现,所以可以任意的更换实现而不用更改代码中的日志相关代码。
一、log4j2日志级别
从大到小依次是: off, fatal, error, warn, info, debug, trace, all
二、对于log4j2配置文件的理解
1.配置文件结构:
-
Appdenders
部分-
Appender
-
Filter
-
Layout
-
Policies
-
Strategy
-
Appender
-
-
-
Loggers
部分-
Logger
-
RootLogger
-
2.对于Appender的理解
简单说Appender就是一个管道,定义了日志内容的去向(保存位置)。
配置一个或者多个Filter,Filter的过滤机制和Servlet的Filter有些差别,下文会进行说明。
-
配置Layout来控制日志信息的输出格式。
-
配置Policies以控制日志何时(When)进行滚动。
-
配置Strategy以控制日志如何(How)进行滚动。
3.对于Logger的理解
简单说Logger就是一个路由器,指定类、包中的日志信息流向哪个管道,以及控制他们的流量(日志级别)
4.l配置文件格式
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Appender>
<Filters>
<LevelRangeFilter minLevel="..." maxLevel="..." onMatch="..." onMismatch="..."/>
</Filters>
<PatternLayout pattern="..." charset="..."/>
<Policies>
<CronTriggeringPolicy schedule="..."/>
<SizeBasedTriggeringPolicy size="..."/>
<TimeBasedTriggeringPolicy />
</Policies>
</Appender>
<Appender>
// ...
</Appender>
</Appenders>
<Loggers>
<Logger>
<AppenderRef ref="...">
</Logger>
<Root>
<AppenderRef ref="...">
</Root>
</Loggers>
</Configuration>
5.Appender标签的实现类
其实这些标签都是类名或者类名去掉后缀。
Appender的常用的实现类有:
-
ConsoleAppender(Console)
-
FileAppender(File)、RandomAccessFileAppender(RandomAccessFile)
-
RollingFileAppender(RollingFile)、RollingRandomAccessFileAppender(RollingRandomAccessFile)
打开这些实现类的源码,你一定会恍然大明白,括号中的是实现类在log4j2.xml配置文件中的标签名。
6.ConsoleAppender(Console)
该实现类会把日志输出到控制台中。
它有两种输出方式:
-
SYSTEM_OUT(System.out)
-
SYSTEM_ERR(System.err)
如果不配置,默认使用SYSTEM_OUT进行输出。括号中是调用的方法。
简单示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration name="baseConf" status="warn" monitorInterval="30">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<!-- 格式化日志 -->
<PatternLayout pattern="%d{HH:mm:ss.SSS}