簡體   English   中英

Log4j,禁用依賴於環境的 appender

[英]Log4j, disable appenders dependent on environment

我想要一個 log4j.xml 配置並且能夠在開發我的應用程序時登錄到控制台。 一旦部署到環境中,我只想登錄到文件附加程序而不是控制台。 我怎樣才能做到這一點?

這是我當前的配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="DEBUG" />
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <appender name="LogFileAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="${log-base-dir}/${adapter-name}.log" />
        <param name="MaxFileSize" value="5000KB" />
        <param name="MaxBackupIndex" value="99" />
        <param name="append" value="true" />        
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="info" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="LogFileAppender" />
    </root>

</log4j:configuration>

解決方案之一可能是分離用於開發生產環境的 log4j 配置文件,例如:

  • log4j-development.xml - 用於開發環境
  • log4j-production.xml - 用於生產環境

然后你的應用程序啟動命令可以有參數指定 log4j 配置文件,例如java -Dlog4jconfig=log4j-development.xml -jar Application.jar

您可以通過獲取代碼中log4jconfig屬性的值來配置 log4j,例如System.getProperty("log4jconfig")

該解決方案的優點如下:

  • 您可以指定(伐木者獨立ConsoleAppenderLogFileAppender發展,只有LogFileAppender生產)
  • 您可以指定每個環境的日志記錄級別(例如,生產中的error和開發中的debug
  • 您可以獨立配置文件記錄器,例如在生產中保留 X 天的日志(用於審計目的等),並且在開發中只有一個日志文件等。

該模式用於許多具有多個環境(開發、UAT、登台、生產等)的應用程序服務器中。

log4j-development.xml示例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="DEBUG" />
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="debug" />
        <appender-ref ref="ConsoleAppender" />
    </root>

</log4j:configuration>

log4j-production.xml示例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="LogFileAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="${log-base-dir}/${adapter-name}.log" />
        <param name="MaxFileSize" value="5000KB" />
        <param name="MaxBackupIndex" value="99" />
        <param name="append" value="true" />        
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="error" />
        <appender-ref ref="LogFileAppender" />
    </root>

</log4j:configuration>

使用 appender 的Threshold參數和JVM系統屬性很容易做到。 例如

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="${my.console.level}" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n" />
    </layout>
</appender>

然后在 prod 上啟動應用程序時使用-Dmy.console.level=OFF

同時在本地啟動時使用-Dmy.console.level=ALL

OFFALL都是有效的 log4j 級別。

使用 Log4j2,您也可以使用 Java 系統屬性切換 appender 引用,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error">
    <Appenders>
        <!-- Log file location uses Tomcat system variable, change for other web servers -->
        <RollingFile name="rolling-file"/>
        <Console name="console"/>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="${sys:log4j.loggers.root.appender:-rolling-file}"/>
        </Root>
    </Loggers>
</Configuration>

(負-在SYS丙變量的默認值的前面需要出於某些原因)

從默認的“滾動文件”切換到控制台“

-Dlog4j.loggers.root.appender=console

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM