springboot2.0 如何配置log4j2?
吐槽:
查了2天的log4j2的知识,现在刚能配置出来,在此记录下,还有很多不明白的地方,感觉像是瞎配的。想去官网看的,看不出来啥东西,根本没找到配置文件内容怎么搞。。。。知道的告知下,也就在官网github看到下面这么写
之前配置过log4j,但是log4j2的效率不是更快嘛,就搞下了,说实话配置xml文件很恶心,难看死了,臃肿,看着就不舒服,我还是喜欢配置log4j.properties,干净明了,但偏偏log4j2的配置只支持.xml和.json
开始:
1 配置pom文件
从 Spring Boot 1.4开始的版本就要用log4j2了,支持的格式有json和xml两种格式,当然也不是说就不能用log4j,你直接引入log4j的jar包也一样可以用log4j。
我现在 springboot是2.0,在maven里我直接引入spring-boot-starter-log4j2就行了,版本号就不用写了,直接依赖parent就行了,这个简书的文本模式不能直接写代码,真是蛋疼啊,说明还是不够先进,截图吧,哎改成markdown了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 想要配置log4j2,就要先去除logging包 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2 在application.properties同级目录下创建log4j2.xml文件
内容如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<!-- 输出控制台的配置 -->
<Console name="console" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 这个都知道是输出日志的格式 -->
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!--配置自定义日志,按天输出-->
<RollingFile name="weather" fileName="/log/weather.log" filePattern="/log/weather-%d{yyyy-MM-dd}.log" >
<PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
<!-- 把系统所有的error全部打到这个文件里 -->
<File name="error" fileName="/log/error.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
</appenders>
<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="ERROR"></logger>
<logger name="org.mybatis" level="ERROR"></logger>
<logger name="org.hibernate" level="ERROR"></logger>
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="error" />
</root>
<!-- additivity="true" 的意思是会在控制台也输入一份-->
<logger name="weather" level="info" additivity="true">
<appender-ref ref="weather"/>
</logger>
</loggers>
</configuration>
结果就是会在电脑根目录下创建log文件夹,里面创建2个log文件,像这样
其中
weather的log配置的是按天输出日志
error的log是所有的系统报错信息输出的log文件
3代码里如何使用
Logger logger = LogManager.getLogger("weather");
logger.info("bala=balabalabalabala " );