说明:本文为作者原创,欢迎大家转载,不过记得声明出处哦~
前言
日志管理在软件开发中必不可少,而Java开发中,log4j2以其简单易用的特点使其普及度非常高。但非常可惜的是log4j2的官方文档本人搜索大半天也没有找到(可能是本人英文水平实在太有限,各位可以尝试找一找,这里贴上官网地址:Apache Log4j2,找到了还请告诉我一声),另外虽然能在网上各大论坛找到一些开发者的笔记,但大都比较零散。本人参考了不下20篇开发者笔记和一些线上资料,整合出了一份比较全的log4j2配置,希望各位可以借此节省开发时间。
描述
这里以springboot基础框架来整合log4j2。
正文
pom.xml文件对log4j2的依赖配置
<dependencies>
<!-- something -->
<!-- log配置 -->
<!-- 排除springboot原有的log依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<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>
</dependencies>
log4j2.xml文件配置
log4j2在springboot中的配置只需要在项目的“src\main\resources\”目录下生成一个以log4j2开头的xml文件,springboot就能自动依据该文件的内容配置log4j2了。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE >ALL -->
<!-- status:设置log4j2本身的日志信息打印级别,可以不设置。当设置为info及以下级别时,在更改当前log4j2.xml文件后,自动检测功能发现xml文件有更改,将会打印更改日志,可以在console中看到。因此该status是log4j2.xml文件的日志设置。 -->
<!-- monitorInterval:设置间隔时间,单位为秒。Log4j2能够自动检测修改,并在monitorInterval设定的时间周期重新加载配置,无需重启应用 -->
<configuration status="info" monitorInterval="5">
<!-- 自定义属性 -->
<Properties>
<!-- 缺省配置(用于开发环境),配置日志文件输出目录和动态参数。其他环境需要在VM参数中指定; -->
<!-- “sys:”表示:如果VM参数中没指定这个变量值,则使用本文件中定义的缺省全局变量值 -->
<Property name="instance">spring-boot-demo-log4j2</Property>
<Property name="log.dir">D:\log4j2</Property>
</Properties>
<!-- 定义所有的appender -->
<Appenders>
<!--这个是输出控制台的配置-->
<!-- name:指定Appender的名字 -->
<!-- target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT -->
<Console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<!-- PatternLayout:输出格式,不设置默认为:%m%n -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%level] [%l] - %message%n"/>
<Filters>
<ThresholdFilter level="info" onMatch="accept" onMismatch="deny"/>
</Filters>
</Console>
<!-- info及以上级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<!-- name:指定Appender的名字 -->
<!-- fileName:指定输出日志的目的文件带全路径的文件名 -->
<!-- filePattern:指定新建日志文件的名称格式 -->
<RollingRandomAccessFile name="infoLog"
fileName="${log.dir}/${instance}-info.log"
filePattern="${log.dir}/%d{yyyy-MM}/${instance}-info-%d{yyyy-MM-dd}-%i.log.gz"
append="true">
<!-- PatternLayout:日志输出格式,不设置默认为:%m%n -->
<!-- <PatternLayout pattern="[%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%level][%class][%line]:%message%n"/> -->
<PatternLayout pattern="[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] [%l] - %message%n"/>
<!-- 过滤器 -->
<!-- 注意,这里要做一些特点说明: -->
<!-- 等级大小关系为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE >ALL。 -->
<!-- 在ThresholdFilter配置中,level属性是用来标识“匹配范围”的&#x