java - 当两个 logback.xml 在 Websphere 服务器上运行时日志被合并

标签 java websphere logback logback-classic websphere-9

我面临的问题是,我有一个应用程序使用包含 logback.xml(具有其日志文件的目标文件夹)的 jar 文件(jar1),另一个应用程序也使用包含另一个的 jar 文件(jar2) logback.xml(其日志文件具有不同的目标文件夹)。对于第一个应用程序,我使用共享文件配置为 jar1 的类加载器。现在在这种情况下,日志正在被合并。在第二个应用程序的第一个目标文件夹中创建一些日志,反之亦然。我正在使用WebSphere9。有没有办法在特定的目标文件夹中创建日志文件,而不合并日志?

保留第一个类加载器,我尝试使用第二个类加载器和 jar2 共享文件配置,用于第二个应用程序。但在这种情况下,任何一个应用程序都可以工作。所以这个解决方案被排除了。

第一个应用程序的logback.xml:

<?xml version="1.0" encoding="UTF-8"?>

<appender name="consoleAppender"
    class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>%-50(%level %logger{35}) cn=%contextName - %msg%n</Pattern>
    </layout>
</appender>

<appender name="mainAppender"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${USR_HOME}/yoda.log</file>
    <rollingPolicy
        class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${USR_HOME}/yoda.%i.log</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>20</maxIndex>
        <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>
    <triggeringPolicy
        class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>50MB</maxFileSize>
    </triggeringPolicy>
    <encoder
        class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern%-50(%level %logger{35}) cn=%contextName - %msg%n</Pattern>
    </encoder>
    <prudent>false</prudent>
</appender>

<root name="MAIN_LOGGER" level="ERROR" additivity="true">
    <appender-ref ref="mainAppender" />
</root>

第二个应用程序的logback.xml:

 <?xml version="1.0" encoding="UTF-8"?>

<appender name="consoleAppender"
    class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>%-50(%level %logger{35}) cn=%contextName - %msg%n</Pattern>
    </layout>
</appender>

<appender name="mainAppender"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${AG_HOME}/kenobi.log</file>
    <rollingPolicy
        class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${AG_HOME}/kenobi.%i.log</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>20</maxIndex>
        <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>
    <triggeringPolicy
        class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>50MB</maxFileSize>
    </triggeringPolicy>
    <encoder
        class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern%-50(%level %logger{35}) cn=%contextName - %msg%n</Pattern>
    </encoder>
    <prudent>false</prudent>
</appender>

<root name="MAIN_LOGGER" level="ERROR" additivity="true">
    <appender-ref ref="mainAppender" />
</root>

最佳答案

看起来两个应用程序共享的类加载器只选取了一个 logback 配置文件。不要将 logback 或 log4j 配置文件打包到应用程序 jar 文件中,而是尝试将这两个配置文件添加到 WebSphere 上定义的两个共享库中,并配置应用程序以引用共享库。

查看 IBM 知识中心有关引用共享库的文章。 https://www.ibm.com/support/knowledgecenter/SS7K4U_9.0.5/com.ibm.websphere.zseries.doc/ae/tcws_sharedlib_app.html

关于java - 当两个 logback.xml 在 Websphere 服务器上运行时日志被合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61177510/

相关文章:

Java类路径设置错误

java - 将视频分成预定义的 block

java - 使用 ServletOutputStream 在 Java servlet 中写入非常大的文件而不会出现内存问题

scala - SLF4J 初始化 - 替代记录器

java - 给定一个字符串,计算以 'y' 或 'z' 结尾的单词数

java - java中哲学家就餐导致僵局

Java - 如何配置 log4j2.xml

java - WebSphere 7. 从另一个应用程序注入(inject) EJB

java - spring boot logback-spring.xml maxFileSize 不适用于 SizeAndTimeBasedRollingPolicy

java - 扩展 logback 配置