【问题标题】:Spring boot profile and environment in the logfile name日志文件名中的 Spring Boot 配置文件和环境
【发布时间】:2020-07-18 05:42:36
【问题描述】:

如何使用 Log4j2.xml 在日志文件的日志文件名中写入 Spring Profile 和 Spring Environment

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="10">
    <Properties>
        <Property name="env">????</Property>
        <Property name="profile">????</Property>
        <Property name="date">%d{yyyy-MM-dd_HHmm}</Property>
    </Properties>
    <Appenders>
        <Console name="LogToConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %c{1} %-5level %c{1} - %message%n"/>
        </Console>
        <RollingRandomAccessFile name="LogToFile" filePattern="./logs/filename_${env}_${profile}_${date}.log">
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %c{1} - %message%n"/>
            <Policies>
                <OnStartupTriggeringPolicy />
            </Policies>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="LogToConsole" />
            <AppenderRef ref="LogToFile" />
        </Root>
    </Loggers>
</Configuration>

【问题讨论】:

    标签: xml spring spring-boot logging log4j2


    【解决方案1】:

    希望这个博客对你有帮助

    https://www.logicbig.com/tutorials/spring-framework/spring-boot/profile-logback-logging-config.html

    spring.main.banner-mode=off
    spring.main.logStartupInfo=false
    spring.profiles.active=prod
    

    【讨论】:

      【解决方案2】:

      使用${sys:spring.profiles.active},因为使用 -D 给出的任何参数都算作 SystemProperties。

      <?xml version="1.0" encoding="UTF-8"?>
      <Configuration monitorInterval="10">
          <Properties>
              <Property name="profile">${sys:spring.profiles.active}</Property>
              <Property name="date">%d{yyyy-MM-dd_HHmm}</Property>
          </Properties>
          <Appenders>
              <Console name="LogToConsole" target="SYSTEM_OUT">
                  <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %c{1} %-5level %c{1} - %message%n"/>
              </Console>
              <RollingRandomAccessFile name="LogToFile" filePattern="./logs/filename_${profile}_${date}.log">
                  <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %c{1} - %message%n"/>
                  <Policies>
                      <OnStartupTriggeringPolicy />
                  </Policies>
              </RollingRandomAccessFile>
          </Appenders>
          <Loggers>
              <Root level="INFO">
                  <AppenderRef ref="LogToConsole" />
                  <AppenderRef ref="LogToFile" />
              </Root>
          </Loggers>
      </Configuration>
      

      【讨论】:

        【解决方案3】:

        使用 Log4j 2.13.1 并包含 log4j-spring-cloud-config-client-2.13.1.jar 作为依赖项。这将为您提供对 Spring Lookup 的访问权限,这将使您可以访问 application.yml 或 bootstrap.yml 中定义的任何属性。然后你可以添加

        spring:
          profile: lab
          env: dev
        

        到您的 Spring 配置,然后将您的 log4j2.xml 设置为:

        <?xml version="1.0" encoding="UTF-8"?>
        <Configuration monitorInterval="10">
            <Properties>
                <Property name="profile">${spring:spring.profile:-default}</Property>
                <Property name="env">${spring:spring.env:-dev}</Property>
                <Property name="date">%d{yyyy-MM-dd_HHmm}</Property>
            </Properties>
            <Appenders>
                <Console name="LogToConsole" target="SYSTEM_OUT">
                    <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %c{1} %-5level %c{1} - %message%n"/>
                </Console>
                <RollingRandomAccessFile name="LogToFile" filePattern="./logs/filename_${env}_${profile}_${date}.log">
                    <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %c{1} - %message%n"/>
                    <Policies>
                        <OnStartupTriggeringPolicy />
                    </Policies>
                </RollingRandomAccessFile>
            </Appenders>
            <Loggers>
                <Root level="INFO">
                    <AppenderRef ref="LogToConsole" />
                    <AppenderRef ref="LogToFile" />
                </Root>
            </Loggers>
        </Configuration>
        

        一旦初始化,Log4j 就会从 Spring 环境中检索值。请注意,Spring Boot 应用程序将至少初始化日志记录 3 次,第一次发生在 Spring 有环境之前。您可以通过在 log4j2.component.properties 中配置其位置,然后在 bootstrap.yml 中指定不同的日志记录配置文件来针对这种情况使用不同的日志记录配置。 Log4j 2 提供了一个sample application,它利用它并在 Spring Cloud Config Server 中访问其配置文件。

        请注意,如果您将 log4j2.xml 文件存储在 Spring Cloud Configuration 中,您可以为每个环境使用不同的 Log4j 配置并消除对变量的需要。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-30
          • 1970-01-01
          • 1970-01-01
          • 2020-05-07
          相关资源
          最近更新 更多