为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot 和 Log4J2 的奇怪行为

Spring Boot 和 Log4J2 的奇怪行为

Smart猫小萌 2023-12-13 15:00:39
运行 Spring Boot 应用程序时,我遇到了一些奇怪的问题。它已配置为使用 Log4J2 作为其记录器(Logback 记录器已被禁用)。log4j2.xml:<Configuration status="WARN" monitorInterval="30">  <Properties>    <Property name="serviceName">$${sys:service.name}</Property>    <Property name="serviceId">$${sys:service.id}</Property>    <Property name="LOG_PATTERN">      [%d{yyyy-MM-dd HH:mm:ss.SSS}] %t %-5p: %c{2}:%L - %m%n    </Property>运行 Spring Boot 应用程序时,我遇到了一些奇怪的问题。它已配置为使用 Log4J2 作为其记录器(Logback 记录器已被禁用)。log4j2.xml:<Configuration status="WARN" monitorInterval="30">  <Properties>    <Property name="serviceName">$${sys:service.name}</Property>    <Property name="serviceId">$${sys:service.id}</Property>    <Property name="LOG_PATTERN">      [%d{yyyy-MM-dd HH:mm:ss.SSS}] %t %-5p: %c{2}:%L - %m%n    </Property>    <Property name="STATS_PATTERN">      %m%n    </Property>    <Property name="logFile">logs/$${sys:service.name}-$${sys:service.id}</Property>    <Property name="statsFile">metrics/$${sys:service.name}-$${sys:service.id}_stats.json</Property>    <!--    <Property name="logFile">logs/${serviceName}-${serviceId}</Property>    <Property name="statsFile">metrics/${serviceName}-${serviceId}_stats.json</Property>    -->  </Properties>  <Appenders>    <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">      <PatternLayout pattern="${LOG_PATTERN}" />    </Console>    <RollingFile name="RollingFile" fileName="${logFile}.current-session.log"      filePattern="${logFile}.%i.log.gz" ignoreExceptions="false">      <PatternLayout>        <Pattern>${LOG_PATTERN}</Pattern>      </PatternLayout>      <Policies>        <OnStartupTriggeringPolicy />        <SizeBasedTriggeringPolicy size="10 MB" />      </Policies>      <DefaultRolloverStrategy max="10" />    </RollingFile>    <File name="StatsFile" fileName="${statsFile}" append="false">      <PatternLayout>        <Pattern>${STATS_PATTERN}</Pattern>      </PatternLayout>
查看完整描述

1 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

对于您的主要问题log4j2.xml,您应该使用您的文件名,log4j2-spring.xml因为这样您就可以让 Spring Boot 更好地控制 Log4j2。

好处之一是可以整合您缺少的变量。这可能是由于使用log4j2.xml文件使得log4j2在spring boot之前初始化,而使用log4j2-spring.xmlmakes Spring Boot来初始化log4j2。

正如SpringBoot 文档所述:

如果可能,我们建议您使用 -spring 变体进行日志记录配置(例如,logback-spring.xml 而不是 logback.xml)。如果使用标准配置位置,Spring 无法完全控制日志初始化。

对于你的第二个问题,因为你有 2 个记录器......简单地说:

 <Loggers>

    <Logger name="<package>.StatsWriter" level="info" additivity="false">

      <AppenderRef ref="StatsFile" />   <---- This one creates your file

    </Logger>


    <Root level="info">

      <AppenderRef ref="ConsoleAppender" />

    </Root>

  </Loggers>

关于你的第三个问题

我对 application-"profile".yml 和 log4j2-spring.xml 的引用有点困惑。我不熟悉这些文件名的这些变体。这些变化(两种文件类型)的意义是什么?

它的变体application-"profile".xxx是允许 Spring Boot 根据这些配置文件采取不同配置的一种方式。您可以使用“dev”参数(本地开发数据库)启动应用程序,但在生产中您可以使用不同的参数。您可以控制如何通过不同的方式引导不同的配置文件,一种非常常见的方式是执行您的应用程序,例如java -jar -Dspring.profiles.active=prod application.jar

与 相关log4j2-spring.xml,如上所述,允许 Spring Boot 正确初始化 log4j2 (或您使用的任何日志记录工具)。


查看完整回答
反对 回复 2023-12-13
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信