本篇文章主要介绍SpringMVC如何集成slf4j以及log4j2
slf4j与log4j2的介绍
Jar依赖
<!-- slf4j核心包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!--slf4j对应log4j2的中间件,即桥接 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.13.1</version>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.13.1</version>
<scope>runtime</scope>
</dependency>
<!--log4j2 异步依赖-->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.6</version>
</dependency>
log4j-web是为了避免log的资源没有释放,它是利用的Servlet的生命周期来进行log4j的配置和资源的释放。用pom分析工具可以分析出来他们之间的依赖关系
配置log4j2的配置文件位置
在web.xml中配置参数:
<!-- lo4j2的配置文件 -->
<context-param>
<param-name>log4jConfiguration</param-name>
<!-- 默认文件名log4j2.xml -->
<param-value>classpath:log4j2.xml</param-value>
</context-param>
如果在classpath定义的log4j2的配置文件就是log4j2.xml,也可以不用在web.xml中配置log4jConfiguration参数。
配置log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO" monitorInterval="30">
<properties>
<!-- 配置日志文件输出目录 -->
<Property name="log_dir">/data/logs/app</Property>
</properties>
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS}|%-5level|%thread|%c-%L| - %msg%n"/>
</Console>
<RollingFile name="ROLLING_FILE" fileName="${log_dir}/catalina.out"
filePattern="${log_dir}/catalina.%d{yyyy-MM-dd}.log.gz"
immediateFlush="false">
<Filters>
<ThresholdFilter level="INFO" onMatch="ACCEPT"/>
</Filters>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS}|%-5level|%thread|%X{invokeNo}|%c-%L| - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!--设置spring和mybatist等第三方jar中的日志输出级别->
<logger name="org.springframework" level="INFO"></logger>
<logger name="org.mybatis" level="INFO"></logger>
<AsyncRoot level="DEBUG" includeLocation="true">
<AppenderRef ref="CONSOLE"/>
<AppenderRef ref="ROLLING_FILE" />
</AsyncRoot>
</Loggers>
</configuration>
使用
private Logger logger = LoggerFactory.getLogger(this.getClass());
logger.debug("debug");
网友评论