springboot整合log4j2案例以及异常输出格式案例2
目录
一 springboot项目
1.1 springboot项目使用logback默认日志
二 springboot项目集成log4j2
2.1 引入依赖
2.2 排除依赖
2.3添加log4j2配置文件
2.4 在application配置文件中添加log4j2配置文件
2.5 异步配置
2.6 启动验证
三 配置异常格式案例
3.1 异常格式参考
3.2 异常案例
3.2.1 默认不设置异常格式
3.2.2 场景1:%throwable
3.2.3 场景2*:%throwable{short}
3.2.4 场景3:%throwable{short.className}
3.2.5 场景4:%throwable{short.fileName}
3.2.6 场景5:%throwable{short.methodName}
3.2.7场景6:%throwable{short.lineNumber}
3.2.8场景7*:%throwable{short.messae}
3.2.9场景8:%throwable{short.messae}
3.2.10场景9*:%throwable{n}
3.2.11场景10:%throwable{separator( --> )}
3.3结论
一 springboot项目
1.1 springboot项目使用logback默认日志
1.项目启动后,打印日志
二 springboot项目集成log4j2
2.1 引入依赖
<!--log4j2--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
2.2 排除依赖
springboot默认使用Logback日志框架来记录日志,并用INFO级别输出到控制台,所以我们要先排除它的依赖
<!--spring boot的启动类 --> <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>
2.3添加log4j2配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<!-- %d{HH:mm:ss.SSS} 毫秒的时间
%p代表输出该条日志的等级
%t 当前线程名称
%-5level 日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%c{1} 类名
%L 输出行号
%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Client.java
%M 输出所在方法名
%m是输出代码指定的日志信息
%l 输出语句所在的行数, 包括类名、方法名、文件名、行数 (这个比较强大) -->
<configuration status="WARN" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="%clr{[%d{HH:mm:ss:SSS}]}{green} [%p] [%t] - %c{5} - %m%clr{%throwable{short.methodName}}{red}%n"/>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- <PatternLayout pattern="%clr{[%d{HH:mm:ss:SSS}]}{green} [%p] [%t] - %l- %m%clr{%throwable}{red}%n"/>-->
<!-- <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %style{%L}{red} %M - %msg%style{%throwable}{red}%n" disableAnsi="false" noConsoleNoAnsi="false"/>-->
</console>
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
<File name="log" fileName="E:/log4j2/test.log" append="false">
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] [%t] - %l - %m%n"/>
</File>
<!--INFO日志文件输出 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="E:/log4j2/info.log"
filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<!-- Warn日志文件输出 -->
<RollingFile name="RollingFileWarn" fileName="E:/log4j2/warn.log"
filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<!-- Error日志文件输出 -->
<!--<RollingFile name="RollingFileError" fileName="E:/logs/error.log"-->
<!--filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">-->
<!--<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!--<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>-->
<!--<Policies>-->
<!--<TimeBasedTriggeringPolicy/>-->
<!--<SizeBasedTriggeringPolicy size="100 MB"/>-->
<!--</Policies>-->
<!--</RollingFile>-->
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!--节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等-->
<!--<logger name="org.springframework" level="INFO"></logger>-->
<!--<logger name="org.mybatis" level="INFO"></logger>-->
<!-- <root level="INFO">-->
<!-- <appender-ref ref="Console"/>-->
<!-- <appender-ref ref="log"/>-->
<!-- <appender-ref ref="RollingFileInfo"/>-->
<!-- <appender-ref ref="RollingFileWarn"/>-->
<!-- <!–<appender-ref ref="RollingFileError"/>–>-->
<!-- </root>-->
<AsyncRoot level="INFO" includeLocation="true" >
<AppenderRef ref="Console"/>
</AsyncRoot>
</loggers>
</configuration>
2.4 在application配置文件中添加log4j2配置文件
需要在application.properties文件中添加配置
2.5 异步配置
1.添加依赖
<dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.4</version> </dependency>
2.配置:新增一个log4j2_component.properties文件,配置内容如下:
log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
2.6 启动验证
springboot 集成Log4j2_springboot集成log4j2-CSDN博客
https://www.zhihu.com/tardis/bd/art/244943401?source_id=1001
SpringBoot整合Log4j2日志框架 - Evan1024 - 博客园
springboot集成log4j2日志 - theSummerDay - 博客园
https://mp.weixin.qq.com/s/sLo_yMwTxzp52TLBKtdkqA
1.控制台输出
2.不同文件输出
3.输出语句: 使用门面层slf4j
三 配置异常格式案例
3.1 异常格式参考
Pattern Layout :: Apache Log4j
https://blog.csdn.net/wb1046329430/article/details/119222123
3.2 异常案例
3.2.1 默认不设置异常格式
1.正常所打印异常日志
1.针对错误日志输出,没有指定输出格式:输出完整的堆栈信息
3.2.2 场景1:%throwable
默认情况下,这将输出完整的跟踪,就像调用Throwable.printstacktrace()一样。
3.2.3 场景2*:%throwable{short}
输出 Throwable 的第一行。
3.2.4 场景3:%throwable{short.className}
输出发生异常的类的名称
3.2.5 场景4:%throwable{short.fileName}
输出发生异常的类的名称
3.2.6 场景5:%throwable{short.methodName}
输出发生异常的方法名。
3.2.7场景6:%throwable{short.lineNumber}
输出发生异常的行号。
3.2.8场景7*:%throwable{short.messae}
输出消息
3.2.9场景8:%throwable{short.messae}
输出本地化消息。
3.2.10场景9*:%throwable{n}
指定输出行数。指定%throwable{none}或%throwable{0}将抑制异常的输出
3.2.11场景10:%throwable{separator( --> )}
3.3结论
1.ex|exception|throwable: 输出完整的异常堆栈,输出格式和Throwable.printStackTrace()相同
2.xEx|xException|xThrowable: 除了输出ex|exception|throwable的信息外,还输出类所在的包信息,例如类所在目录的jar包名称。
未配置异常输出格式时,默认输出格式为xEx|xException|xThrowable。即默认会通过类加载获取异常堆栈中每个类的包名和版本号。
3.解决办法:
修改log4j的日志配置,强制指定每个日志文件的异常堆栈格式为ex|exception|throwable,修改如下:
%m%clr{%throwable}{short}{red}%n
%m%clr{%throwable}{n}{red}%n
%m%clr{%throwable}{short.message}{red}%n