0

我面临的问题是,我有一个应用程序使用包含 logback.xml 的 jar 文件(jar1)(其日志文件具有目标文件夹),另一个应用程序也使用包含另一个 logback.xml 的 jar 文件(jar2) (其日志文件具有不同的目标文件夹)。对于第一个应用程序,我使用了一个带有 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>

4

1 回答 1

0

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

查看 IBM Knowledge Center 关于参考共享库的文章。 https://www.ibm.com/support/knowledgecenter/SS7K4U_9.0.5/com.ibm.websphere.zseries.doc/ae/tcws_sharedlib_app.html

于 2020-04-17T20:24:58.603 回答