SpringBoot 使用log4j2的配置过程

2023-02-23 0 2,511

目录

前言

日志接口(slf4j)

slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback)。
接口用于定制规范,可以有多个实现,使用时是面向接口的(导入的包都是slf4j的包而不是具体某个日志框架中的包),即直接和接口交互,不直接使用实现,所以可以任意的更换实现而不用更改代码中的日志相关代码。

日志实现(log4j、logback、log4j2)

Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。虽然已经停止维护了,但目前绝大部分企业都是用的log4j。
LogBack:logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现。
Log4j2:Log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活。

配置过程

springboot默认是用logback的日志框架的,所以要在pom中配置排除logback。这里需要注意的是,其实不止一处使用了logback,所以要在starter中统一排除,然后引入log4j2。

涉及的POM部分文件

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion><!-- springboot默认是用logback的日志框架的 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <!-- 引入log4j2依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j2配置文件,默认命名为log4j2.xml。 程序会会自动加载,如果命名为log4j2-xx.xml。需要在在SpringBoot配置文件application.properties中引入该配置文件,增加一行:logging.config=classpath:log4j2-xx.xml
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>

<Configuration status=\"WARN\" monitorInterval=\"1800\">

<!--变量配置-->
<Properties>
<!--应用名称-->
<property name=\"APP_NAME\">sky-hello</property>
<!--日志存放路径-->
<property name=\"LOG_PATH\">./logs/${APP_NAME}</property>
<!--日志备份路径-->
<property name=\"LOG_BACKUP_PATH\">${LOG_PATH}/backup</property>
<!--日志输出格式-控制台-->
<property name=\"PATTERN_CONSOLE\">%d{yyyy-MM-dd HH:mm:ss.SSS} | %blue{%traceId} | %highlight{%-5p} | %magenta{${sys:PID}} | %yellow{%t} | %cyan{%l} : %msg%n</property>
<!--日志输出格式-文件-->
<property name=\"PATTERN_FILE\">%d{yyyy-MM-dd HH:mm:ss.SSS} | %traceId | %-5p | ${sys:PID} | %t | %l : %msg%n</property>
</Properties>

<!--定义日志输出目的地,内容和格式等-->
<Appenders>

<!--可归档文件
1. fileName: 日志存储路径
2. filePattern: 历史日志封存路径。其中%d{yyyy-MM-dd}表示了日志的时间单位是天,log4j2自动识别zip等后缀,表示历史日志需要压缩
-->
<RollingFile name=\"RollingFile\" fileName=\"${LOG_PATH}/${APP_NAME}.log\" filePattern=\"${LOG_BACKUP_PATH}/$${date:yyyy-MM}/${APP_NAME}-%d{yyyy-MM-dd}_%i.log.zip\">
<!--输出日志的格式, 不设置默认为:%m%n-->
<PatternLayout pattern=\"${PATTERN_FILE}\"/>
<!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level=\"DEBUG\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>
<!--归档设置-->
<Policies>
<!--按时间间隔归档:
1. interval=时间间隔, 单位由filePattern的%d日期格式指定, 此处配置代表每一天归档一次
2. modulate=\"true\" 是否对interval取模,决定了下一次触发的时间点
-->
<TimeBasedTriggeringPolicy interval=\"1\" modulate=\"true\" />
<!-- 按照日志文件的大小: size表示当前日志文件的最大size,支持单位:KB/MB/GB-->
<SizeBasedTriggeringPolicy size=\"50MB\"/>
</Policies>
<!-- 历史日志配置: 该属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max=\"30\"/>
</RollingFile>

<!--错误信息单独归档-->
<RollingFile name=\"RollingFileError\" fileName=\"${LOG_PATH}/${APP_NAME}-error.log\" filePattern=\"${LOG_BACKUP_PATH}/$${date:yyyy-MM}/${APP_NAME}-error-%d{yyyy-MM-dd}_%i.log.zip\">
<PatternLayout pattern=\"${PATTERN_FILE}\"/>
<ThresholdFilter level=\"ERROR\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size=\"50MB\"/>
</Policies>
</RollingFile>
</Appenders>

<!--Loggers配置-->
<Loggers>

<!--
注意点:
1. logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等:
(1). name: 用来指定该logger所适用的类或者类所在的包全路径,继承自Root节点.
(2). AppenderRef:关联的Appender, 只有定义了logger并引入的appender,appender才会生效
(3). additivity: logEvent的传递性。true LogEvent处理后传递给父Logger打印。false LogEvent处理后不再向上传递给父Logger(解决日志重复输出问题)
(4). logger配置的level必须高于或等于Appenders中ThresholdFilter配置的过滤level, 否则会造成信息丢失
2. root配置日志的根节点
-->

<!-- 同步日志配置-->
<logger name=\"com.sky.hello.mapper\" level=\"debug\" additivity=\"false\">
<AppenderRef ref=\"Console\"/>
<AppenderRef ref=\"RollingFile\"/>
<AppenderRef ref=\"RollingFileError\"/>
</logger>

<root level=\"info\">
<AppenderRef ref=\"Console\"/>
<AppenderRef ref=\"RollingFile\"/>
<AppenderRef ref=\"RollingFileError\"/>
</root>

</Loggers>

</Configuration>

代码中使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private final Logger log = LoggerFactory.getLogger(this.getClass());

log.info(\"info\")

最后附加 log4j的格式配置参数
%n - 换行

%m - 日志内容,输出代码中指定的日志信息

%p - 日志级别(FATAL, ERROR, WARN, INFO, DEBUG or custom)

%r - 程序启动到现在的毫秒数

%% - 输出一个\"%\" 字符

%t - 当前线程名

%d - 日期和时间, 常用的格式有 %d{DATE}, %d{ABSOLUTE}, %d{HH:mm:ss,SSS}, %d{ddMMyyyy HH:mm:ss,SSS}

%l - 同 %F%L%C%M

%F - java源文件名

%L - java源码行数

%C - java类名,%C{1} 输出最后一个元素

%M - java方法名

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 PHP教程 SpringBoot 使用log4j2的配置过程 http://www.20zxx.cn/586022/xuexijiaocheng/qes.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务