# 添加依赖
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.11.1</version> </dependency>
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.11.1</version> </dependency>
|
# JAVA 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class Log4j2Test {
public static final Logger LOGGER = LogManager.getLogger(Log4j2Test.class); @Test public void testQuick() throws Exception { LOGGER.fatal("fatal"); LOGGER.error("error"); LOGGER.warn("warn"); LOGGER.info("info"); LOGGER.debug("debug"); LOGGER.trace("trace"); } }
|
# 使用 slf4j 作为日志的门面,使用 log4j2 作为日志的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <!-- Log4j2 门面API--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.11.1</version> </dependency> <!-- Log4j2 日志实现 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.11.1</version> </dependency> <!--使用slf4j作为日志的门面,使用log4j2来记录日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!--为slf4j绑定日志实现 log4j2的适配器 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.10.0</version> </dependency>
|
# Log4j2 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| <?xml version="1.0" encoding="UTF-8"?> <!-- status="warn" 日志框架本身的输出日志级别 monitorInterval="5" 自动加载配置文件的间隔时间,不低于 5 秒 --> <Configuration status="debug" monitorInterval="5">
<!-- 集中配置属性进行管理 使用时通过:${name} --> <properties> <property name="LOG_HOME">/logs</property> </properties>
<!--日志处理--> <Appenders> <!--控制台输出 appender--> <Console name="Console" target="SYSTEM_ERR"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n" /> </Console>
<!--日志文件输出 appender--> <File name="file" fileName="${LOG_HOME}/myfile.log"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" /> </File>
<!--<Async name="Async">--> <!--<AppenderRef ref="file"/>--> <!--</Async>-->
<!--使用随机读写刘的日志文件输出 appender,性能提高--> <RandomAccessFile name="accessFile" fileName="${LOG_HOME}/myAcclog.log"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" /> </RandomAccessFile>
<!--按照一定规则拆分的日志文件的 appender--> <RollingFile name="rollingFile" fileName="${LOG_HOME}/myrollog.log" filePattern="/logs/$${date:yyyy-MM-dd}/myrollog-%d{yyyy-MM-dd-HH-mm}-%i.log"> <!--日志级别过滤器--> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> <!--日志消息格式--> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %msg%n" /> <Policies> <!--在系统启动时,出发拆分规则,生产一个新的日志文件--> <OnStartupTriggeringPolicy /> <!--按照文件大小拆分,10MB --> <SizeBasedTriggeringPolicy size="10 MB" /> <!--按照时间节点拆分,规则根据filePattern定义的--> <TimeBasedTriggeringPolicy /> </Policies> <!--在同一个目录下,文件的个数限定为 30 个,超过进行覆盖--> <DefaultRolloverStrategy max="30" /> </RollingFile>
</Appenders>
<!--logger 定义--> <Loggers>
<!--自定义异步 logger 对象 includeLocation="false" 关闭日志记录的行号信息 additivity="false" 不在继承 rootlogger 对象 --> <AsyncLogger name="cn.startanew" level="trace" includeLocation="false" additivity="false"> <AppenderRef ref="Console"/> </AsyncLogger>
<!--使用 rootLogger 配置 日志级别 level="trace"--> <Root level="trace"> <!--指定日志使用的处理器--> <AppenderRef ref="Console" />
<!--使用异步 appender--> <AppenderRef ref="Async" /> </Root> </Loggers> </Configuration>
|
# Log4j2 异步日志
配置异步日志需要添加依赖
1 2 3 4 5 6
| <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.3.4</version> </dependency>
|
AsyncAppender方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <Appenders> <!--控制台输出 appender--> <Console name="Console" target="SYSTEM_ERR"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n" /> </Console>
<!--日志文件输出 appender--> <File name="file" fileName="${LOG_HOME}/myfile.log"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" /> </File>
<Async name="Async"> <AppenderRef ref="file"/> </Async> </Appenders>
<Loggers> <!--自定义异步 logger 对象 includeLocation="false" 关闭日志记录的行号信息 additivity="false" 不在继承 rootlogger 对象 --> <AsyncLogger name="cn.startanew" level="trace" includeLocation="false" additivity="false"> <AppenderRef ref="Console"/> </AsyncLogger> </Loggers>
|
AsyncLogger方式
- 全局异步
添加一个log4j2.component.properties 配置
1 2
| Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelecto
|
- 混合异步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
<Appenders> <File name="file" fileName="${LOG_HOME}/myfile.log"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" /> </File> <Async name="Async"> <AppenderRef ref="file"/> </Async> </Appenders>
<Loggers>
<AsyncLogger name="cn.startanew" level="trace" includeLocation="false" additivity="false"> <AppenderRef ref="Console"/> </AsyncLogger>
<Root level="trace"> <AppenderRef ref="Console" />
<AppenderRef ref="Async" /> </Root> </Loggers>
|
# spring boot 使用 log4j2
项目地址:https://github.com/zjzbury/log4j-learn.git