去除spring boot 的logging
首先,因为Spring boot集成了logging依赖,而logging依赖有log4j2,所以会有冲突,需要把Spring boot的logging给干掉先
- 打开项目中的pom.xml文件
- 在里面的任意位置右键打开Show Dependencies(或者使用快捷键Ctrl + Alt + Shift + U,我用的是idea的windows的默认快捷键)
- Ctrl + f 打开搜索框后直接敲键盘logging(默认不显示搜索框,打开后直接敲就对了)
- 然后在空白处右键Exclude即可(管他有没有看到,默认就已经选中了的)
- 然后回到配置文件,看到就已经搞好了
- 最后添加log4j2依赖,就可以开始搞事情了
**特别需要注意的是!如果有导入parent父项目的,务必检查版本有没有太低
如果不确定(我也不知道具体是多少版本),就给log4j2设置版本为2.7.2
(主要是我的父项目版本是2.3.2.RELEASE,log4j2就跟死了一样,所以给log4j2设了个高点版本的)
log4j2的配置文件
先上总配置,再一个个分析
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="fatal">
<Properties>
<Property name="baseDir" value="D:\桌面存放位置\Demo\flash_sale\logs"/>
</Properties>
<CustomLevels>
<CustomLevel name="MQLEVEL" intLevel="300"/>
</CustomLevels>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{MM:dd HH:mm:ss.SSS}] [%level] [%logger{36}] - %msg%n"/>
</Console>
<RollingFile name="test" fileName="${baseDir}/测试一.log"
filePattern="${baseDir}/error_%i.log.%d{yyyy-MM-dd}">
<Filters>
<ThresholdFilter level="MQLEVEL"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="test"/>
</Root>
</Loggers>
</Configuration>
定义输出的位置
<Properties>
<Property name="baseDir" value="D:\logs\test"/>
</Properties>
// name的名字不要改动
定义级别
<CustomLevels>
<CustomLevel name="MQLEVEL" intLevel="300"/>
</CustomLevels>
// name名字自己定义
// 级别划分看下面的表自己定
级别表
OFF = 0
FATAL = 100
ERROR = 200
WARN = 300
INFO = 400
DEBUG = 500
TRACE = 600
ALL = Integer.MAX_VALUE
定义输出日志
<!--这里的fileName就是输出的文件名字,里面的{baseDir}就是上面定义的路径-->
<RollingFile name="test" fileName="${baseDir}/test.log"
filePattern="${baseDir}/error_%i.log.%d{yyyy-MM-dd}">
<!-- 过滤器 -->
<Filters>
<!-- 限制日志级别在 定义的级别名字 及以上 -->
<ThresholdFilter level="MQLEVEL"/>
</Filters>
<!-- 日志格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<!--下面不能少,少了就没有输出-->
<Policies>
<!-- 每隔一天转存 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
自定义的输出的名字放在root下
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<!-- ↓↓↓↓↓↓↓↓↓ -->
<AppenderRef ref="test"/>
</Root>
</Loggers>
Java中发送定义好了的级别日志
LogManager.getLogger("test").log(Level.getLevel("MQLEVEL"),"测试一");
// text为定义的输入消息的名字
// getLevel中是定义的级别
// 后面的就是需要输出的内容
控制台输出
输出的文件内容