【问题标题】:Multiple 1st-party jar files and multiple log4j2 configurations under a web application一个 Web 应用程序下的多个 1st-party jar 文件和多个 log4j2 配置
【发布时间】:2019-11-13 23:30:06
【问题描述】:

如果您有多个 1 方 log4j2 配置,请在 src/main/resources 中说明。如何将日志记录配置设置为彼此分开,以免它们发生冲突。

我现在的想法是有两个不同的文件配置,不定义ROOT节点并指定不同的包。

我也尝试过拥有两个不同的 conf 文件。 log4j2.xml 和 log4j2-test.xml 但这仅适用于两个库。 log4j2-myapp.xml 工作吗?文档说使用系统属性 log4j.file= 但这不起作用,因为我想要两个配置文件。此外,有时我们无法控制此 Web 容器的系统属性。

如何解决多个log4j2配置的问题。

Log4j2 版本、java8、websphere 容器、多个 1stparty jar。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
    <Properties>
        <Property name="logserverdir">defaultvm2</Property>
    </Properties>
    <!-- Log4j2 configuration, use with greylog -->
    <Appenders>        
        <RollingFile name="MainApiCommonsAppenderApi" fileName="/usr/local/pfs/logs/defaultvm2/log4j_api.log"           
                filePattern="/usr/local/pfs/logs/defaultvm2/log4j_api.%i.log">
            <PatternLayout pattern="%d [%t] -- [%X{mdcLogSessionId} - %-5p - %C{1}.%M(%F:%L) - %m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="140MB" />
            </Policies>
            <DefaultRolloverStrategy max="5" />     
        </RollingFile>          
    </Appenders>
    <Loggers>
        <Logger name="com.primerica.pfn" level="info" additivity="false">
                <AppenderRef ref="MainApiCommonsAppenderApi" />
                <AppenderRef ref="GraylogCommons" /> 
        </Logger>     
        <Logger name="org.springframework" level="debug" additivity="false">
                <AppenderRef ref="MainApiCommonsAppenderApi" />
                <AppenderRef ref="GraylogCommons" /> 
        </Logger>          
    </Loggers>
</Configuration>

【问题讨论】:

  • 有点不清楚,因为单个应用程序使用单个日志记录属性。您希望多个日志记录配置文件如何在一个应用程序范围内覆盖它们的属性?
  • XInclude 是否可以工作,以便您可以提供主配置文件并包含其他配置文件。这将允许您不必担心其他文件是否更新,因为您只需包含它们。
  • 单个应用程序使用多个日志记录属性。我不希望它们相互覆盖。如果有就好了: lib1:log4j2-lib1.xml , lib2: log4j2-lib2.xml
  • XInclude 可能会起作用
  • 您可以考虑使用composite configuration。一般来说,我的想法是一个应用程序作为一个整体应该定义它的日志配置而不是单个库。库不知道它是如何被使用的,应用程序确实知道它是如何使用库的。也许应用程序 A 使用类 R 和 S 并希望查看来自它们的详细消息,而应用程序 B 使用类 X 和 Y 并且需要记录来自这些的消息。

标签: java maven log4j log4j2


【解决方案1】:

来自 cmets,这是最好的答案:

“您可能会考虑使用复合配置。总的来说,我的想法是整个应用程序应该定义其日志记录配置而不是单个库。库不知道它是如何使用的,应用程序确实知道它如何使用库。也许应用程序 A 使用类 R 和 S 并希望查看来自它们的详细消息,而应用程序 B 使用类 X 和 Y 并需要记录来自它们的消息”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多