log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量、可配置的审计型日志、基于插件架构的各种灵活配置等。如果已经掌握log4j 1.x,使用log4j2还是非常简单的。
springboot项目中使用logj2
1,引入jar包,maven
<!-- 包含 mvc,aop 等jar资源 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 切换log4j2日志读取 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 配置 log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 加上这个才能辨认到log4j2.yml文件 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
2,resources目录下创建log4j2.xml
Configuration:
status: WARN #打印日志级别OFF>FATAL>ERROR>WARN>INFO>DEBUG>TRACE>ALL
Properties: # 定义全局变量
Property: # 缺省配置(用于开发环境)。其他环境需要在VM参数中指定,如下:
#测试:-Dlog.level.console=warn -Dlog.level.default=trace
#生产:-Dlog.level.console=warn -Dlog.level.default=info
- name: log.level.console
value: info
- name: log.level.default
value: info
- name: log.path
value: logs #项目根路径
- name: project.name
value: log4j2
Appenders: #输出源,用于定义日志输出的地方,
Console: #把日志输出到控制台
name: CONSOLE
PatternLayout: #输出日志的格式
pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%l) - %m%n"
RollingFile: # 输出到文件,超过128MB归档
- name: ROLLING_FILE
ignoreExceptions: false
fileName: ${log.path}/${project.name}.log
filePattern: "${log.path}/${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" #指定当发生Rolling时,文件的转移和重命名规则
PatternLayout:
pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%l) - %m%n"
Policies:
SizeBasedTriggeringPolicy:
size: "128 MB" #指定当文件体积大于size指定的值时,触发Rolling
TimeBasedTriggeringPolicy:
interval: "1" # 注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的时间粒度是mm,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1分钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件。
DefaultRolloverStrategy:
max: 1000 #指定最多保存的文件个数
Loggers:
Root:
level: info
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE
Logger: # 为com.xjj包配置特殊的Log级别,方便调试
- name: org.springframework
additivity: false
level: error
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE
3,在application.properties引入配置文件
logging.config=classpath:log4j2.yml
4,编写测试类进行测试
public class test {
public static void main(String[] args) {
Logger logger = LogManager.getLogger(test.class);
logger.trace("trace level");
logger.debug("debug level");
logger.info("info level");
logger.warn("warn level");
logger.error("error level");
logger.fatal("fatal level");
}
打印结果: