我面临的问题是,我有一个应用程序使用包含 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/