springboot:使⽤log4j2做异步⽇志打印(springboot2.3.1)⼀,为什么要使⽤log4j2?
log4j2是log4j的升级版,
升级后更有优势:
性能更强/吞吐量⼤/⽀持异步
功能扩展/⽀持插件/⽀持⾃定义级别等
这些优势可以从它的官⽹了解
log4j2官⽅⽹站:
/log4j/2.x/
说明:刘宏缔的架构森林是⼀个专注架构的博客,地址:
对应的源码可以访问这⾥获取:
说明:作者:刘宏缔邮箱: 371125307@qq
⼆,本演⽰项⽬的相关信息
1,项⽬地址:
github/liuhongdi/tomcatlogslog4j2不打印日志
2,项⽬原理:
⽣成两个⽇志:
bussiness⽇志:负责记录业务相关的⽇志
error⽇志:负责记录系统中的错误⽇志
3,项⽬结构:
三, log4j2的相关配置
1,⽇志级别的优先级:
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
说明:如果我们设置⽇志级别为:WARN,
则记录的级别包括:WARN / ERROR / FATAL / OFF。2,logger的additivity属性:
如果设置为false,logger不会把⽇志流添加到root的⽇志如果设置为true,则会添加到root的⽇志
说明:如果是异步⽇志时,建议设置为false
3,Appender的immediateFlush属性:
作⽤:⽴刻刷写到磁盘
如果设置为false,能明显⽰的提升性能
即使是同步⽇志也有帮助
4,includeLocation=“true”
说明:includeLocation⽤来获取类的路径,
值只有设置为true时才会⽣效
5,AsyncRoot/AsyncLogger都需要⽤到disruptor功能,
所以⽆论⽤哪个都需要引⼊disruptor功能包
四,配置⽂件说明:
l
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--log4j2 begin-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.2</version>
</dependency>
<!--log4j2  end-->
说明1:spring-boot-starter-web默认包含了⽇志功能包,包含了logback/slf4j两个⽇志包,
所以我们需要⽤excusion排除对此两个包的依赖
说明2:log4j的异步⽇志使⽤了Disruptor的队列技术,
我们需要使⽤异步⽇志,所以这⾥需要引⼊Disruptor,附:Disruptor在mvn上的地址:可以从这⾥查看版本
mvnrepository/artifact/com.lmax/disruptor
2,application.properties
#log4j2
说明:指定log4j2配置⽂件的路径,放到resources⽬录下
l:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern=".%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%file:%line]
%-5level %logger{36} - %msg %n"/>
</Console>
<RollingFile immediateFlush="false"  name="ErrorFile" fileName="/data/logs/tomcatlogs/error.log"
filePattern="/data/logs/tomcatlogs/$${date:yyyy-MM}/error-%d{MM-dd-yyyy}-%i.log">
<Filters>
<ThresholdFilter level="INFO" />
</Filters>
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%file:%line] %-5level %logger{35} - %msg %n</Pattern>            </PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="102400KB"/>
</Policies>
</RollingFile>
<RollingFile immediateFlush="false"  name="BusinessFile" fileName="/data/logs/tomcatlogs/bussiness.log"
filePattern="/data/logs/tomcatlogs/$${date:yyyy-MM}/bussiness-%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%file:%line] %-5level %logger{35} - %msg %n</Pattern>            </PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="102400KB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<AsyncLogger name="BusinessFile" level="info" additivity="false">
<appender-ref ref="BusinessFile"/>
</AsyncLogger>
<AsyncRoot level="info" includeLocation="true">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="ErrorFile" />
</AsyncRoot>
</Loggers>
</Configuration>
说明:
ErrorFile放到asyncRoot下,⽤来记录系统的所有信息
BusinessFile则⽤来记录业务相关的⽇志(需要靠代码⽣成⽇志)
五,java代码说明
1,homecontroller.java
@RestController
@RequestMapping("/home")
public class HomeController {
@GetMapping("/list")
@ResponseBody
public String list() {
Logger logger1 = Class());
Logger logger2 = Logger("BusinessFile");
logger1.info("hello,this is in errorlog");
logger2.info("hello,this is in businesslog");
return "this is list";
}
}
说明:
获取logger时,如果使⽤class,会保存到root下指定的⽇志
如果使⽤指定的⽇志AppenderRef名字,则会保存到名字对应的⽇志
六,测试写⽇志的效果:
1,访问url
127.0.0.1:8080/home/list
2,查看所写⼊的⽇志:
[liuhongdi@localhost tomcatlogs]$ tail -1 bussiness.log
2020-07-0522:46:07.208 [http-nio-8080-exec-7] [:] INFO  BusinessFile - hello,this is in businesslogge
[liuhongdi@localhost tomcatlogs]$ tail -1 error.log
2020-07-0522:46:07.208 [http-nio-8080-exec-7] [HomeController.java:20] INFO  ller.HomeController - hello,this is in errorlog 可以看到⽇志写⼊成功
七,查看spring boot的版本:
.  ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
(( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v2.3.1.RELEASE)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。