1、引入jar包
<slf4j.version>1.7.12</slf4j.version> <log4j2.version>2.3</log4j2.version>
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j2.version}</version> </dependency
2、设置web.xml文件log监听器
<listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>3、新建log4j2.xml文件并存放在resource跟路径下
同步追加配置:
<?xml version="1.0" encoding="UTF-8"?> <!-- Don't forget to set system property -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector to make all loggers asynchronous. --> <Configuration status="trace" > <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFile" fileName="logs/server.log" filePattern="logs/$${date:yyyy-MM}/server-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <SizeBasedTriggeringPolicy size="50MB"/> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> <appender-ref ref="RollingFile"/> </Root> </Loggers> </Configuration>异步追加配置:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Don't forget to set system property-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector to make all loggers asynchronous. -->
<Configuration status="WARN">
<Appenders>
<!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->
<RandomAccessFile name="RandomAccessFile" fileName="async.log" immediateFlush="false" append="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
</PatternLayout>
</RandomAccessFile>
</Appenders>
<Loggers>
<Root level="info" includeLocation="false">
<AppenderRef ref="RandomAccessFile"/>
</Root>
</Loggers>
</Configuration>
4、代码中使用log4j2
导入日志相关类,注意要导入slf4j对应的logger和loggerFactory;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
实例化日志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
使用日志打印
log.info("hello world!");
5、添加jvm log4j2相关参数(目的使日志异步追加)
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector