Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI 组件,甚至是套接口服务器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
这篇文章主要介绍了 Spring Boot 使用 Log4j2 的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
前言
Spring Boot 默认使用 Logback, 来打印日志,这里还想说的 SLFJ(Simple Logging Facade for Java),它们之间的关系,一张图,说明一切:
maven 配置
- <!--use log4j2 property-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter</artifactId>
- <exclusions>
- <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>
- <!--flume log4j appender-->
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-flume-ng</artifactId>
- <version>2.6</version>
- </dependency>
log4j2.xml 配置
Log4j2 提供非常丰富的 Appender, 比如 CassandraAppender,AsyncAppender,我们这里配置了简单的 Flume Appnder,Failover Appender.
- <?xml version="1.0" encoding="UTF-8"?>
- <Configuration monitorInterval="60">
- <Properties>
- <Property name="source">api-web</Property>
- <Property name="log-pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{userId}] [%t] [%-5level] %c{1.}@%M%L - %m%n</Property>
- <!--get product dynamic property-->
- </Properties>
- <Appenders>
- <RollingFile name="RollingFile" fileName="logs/app.log"
- filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
- <PatternLayout>
- <Pattern>${log-pattern}</Pattern>
- </PatternLayout>
- <Policies>
- <TimeBasedTriggeringPolicy />
- <SizeBasedTriggeringPolicy size="250 MB"/>
- </Policies>
- </RollingFile>
- <Flume name="eventLogger" compress="false" type="avro" ignoreExceptions="false">
- <Agent host="192.168.31.115" port="4444"/>
- <Agent host="127.0.0.1" port="4444"/>
- <PatternLayout>
- <pattern>
- <pattern>${log-pattern}</pattern>
- </pattern>
- </PatternLayout>
- </Flume>
- <Console name="Console-Appender" target="SYSTEM_OUT" ignoreExceptions="false">
- <PatternLayout>
- <pattern>${log-pattern}</pattern>
- </PatternLayout>
- </Console>
- <!-- 主要Apeender失败的时候使用备用Appender-->
- <Failover name="Failover" primary="eventLogger">
- <Failovers>
- <AppenderRef ref="RollingFile"/>
- </Failovers>
- </Failover>
- </Appenders>
- <Loggers>
- <!--在需要同时打印文件和发送至flume的时候使用-->
- <!--<Logger name="" level="info" additivity="false">-->
- <!--<AppenderRef ref="RollingFile"/>-->
- <!--</Logger>-->
- <Root level="info">
- <AppenderRef ref="Console-Appender"/>
- <AppenderRef ref="Failover"/>
- </Root>
- </Loggers>
- </Configuration>
总结
如果遇到识别不了 log4j2.properties/xml,可以在 application.properties, 中指定 logging.config=classpath:log4j2.properties/xml
参考
https://springframework.guru/introducing-log4j-enterprise-class-logging/
http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender
来源: http://www.phperz.com/article/17/1218/355853.html