Log4J2
- Log4J2概述
- Log4J2的级别
- 日志输出级别
- Log4J核心组件(Logger,Appender,Layout)
- Logger
- Appender
- Layout
Log4J2概述
log4j2可以按照开发人员预先的设定,在指定的位置和情况下打印log语句,并且可以酌情关闭某些log语句,如开发阶段debug类型的语句等。
新特征:
- 更为先进的APL
- 强大的配置功能
- 支持插件扩展
Log4J2的级别
日志输出级别
- FATAL 非常严重的错误
- ERROR 错误
- WARN 不一定是一个bug,但是有人可能会想知道这一情况
- INFO 用于基本的,高层次的诊断信息
- DEBUG 用于协助低层次的调试
- TRACE 用于展现程序执行的轨迹
从严重性来看:
trace
级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个日志级别的都会输出。
示例:
public class Test {
private static Logger logger = LogManager.getLogger(Test.class);
public static void main(String[] args) {
logger.trace("trace{}{}", "aaa", "bbb");
logger.debug("debug");
logger.info("info");
logger.error("error");
logger.fatal("fatal");
}
}
说明:
没有为log4j2指定任何配置文件,默认级别为error,输出到Console。
如果要定义配置文件,在src目录下创建log4j2.xml文件。
Logger类负责输出日志,不同的日志级别调用不同的方法,支持占位符。
示例:
<?xml version="1.0" encoding="UTF-8"?>
Log4J核心组件(Logger,Appender,Layout)
Logger
负责输出日志,通过LogManager.getLogger()来获取Logger对象。
-
root
Logger logger = LogManager.getRootLogger()
-
带名字的Logger,自动继承root,除非使用additivity="false"。
Logger logger = LogManager.getLogger(Test.class)
Logger配置
- 每一个logger都需要关联一个appender
- com.trkj.Test自动继承root,为了防止不重复输出,需要additivity="false"
Appender
Appenders用来决定一个log将被打印到那个目的地中,可选的打印目的地很多,如console、文件等。
-
ConsoleAppender
-
FileAppender
-
RollingFileAppender
-
JDBCAppender
-
ConsoleAppender
将日志输出到Console控制台
示例:
<?xml version="1.0" encoding="UTF-8"?>
-
FileAppender
将日志输出到文件
示例:
%d %p %c{1.} [%t] %m%n -
RollingFileAppender
将文件输出到文件,但会创建多个文件,这样可以防止文件过大。
需要指定文件拆分策略:
-
基于时间的拆分策略
TimeBasedTriggeringPolicy -
基于文件大小的拆分策略
SizeBasedTriggeringPolicy示例:
%d %p %c{1.} [%t] %m%n TimeBased Triggering Policy
基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:
interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟
modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,之后的封存时间依次为08:00,12:00,16:00,。。。
-
-
JDBCAppender
将日志保存到数据库
示例:
-
同时指定多个Appender
Layout
通常,用户不止希望能定义log输出的位置,还希望可以定义输出的格式。这就可以通过将Appender与一个layout相关联来实现。
-
PatternLayout
-
HTMLLayout
-
JSONLayout
-
PatternLayout
PatternLayout允许指定一种输出模式
%d 时间
%l 位置
%L 行
%m 日志内容
%M 级别方法
%n 换行
%p 级别
? 示例:
%d{DATE} %p %c{1.} %L [%t] %m-%M %n
或者
-
HTMLLayout
以HTML表格的形式输出日志
示例:
-
JSONLayout
以JSON格式输出,需要以下jar库的支持:
-
jackson-core-2.8.1
-
jackson-databind-2.8.1
-
jackson-annotations-2.8.1
下载地址
-
? 示例: