Spring 日志文件名中的引导配置文件和环境

Spring boot profile and environment in the logfile name

如何在 Log4j2.xml

的日志文件的日志文件名中写入 Spring 配置文件和 Spring 环境
<?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>

希望这篇博文对您有所帮助

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

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

<?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>

使用 Log4j 2.13.1 并包含 log4j-spring-cloud-config-client-2.13.1.jar 作为依赖项。这将使您可以访问 Spring 查找,这将使您可以访问 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 启动应用程序将至少初始化日志记录 3 次,第一次发生在 Spring 拥有环境之前。您可以通过在 log4j2.component.properties 中配置其位置然后在 bootstrap.yml 中指定不同的日志记录配置文件来针对该情况使用不同的日志记录配置。 Log4j 2 提供了一个 sample application 来利用它并在 Spring 云配置服务器中访问其配置文件。

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