2

我们正在评估在多服务器 Weblogic 环境中使用 Logback。在一台机器上,我们有两个 Weblogic 服务器实例(基本上是两个独立的 JVM 进程)在同一个 Weblogic 域上运行。服务器记录到相同的日志文件 (application.log)。两台服务器的 Logback 配置 (logback.xml) 相同(如下所示):

<configuration scan="true" debug="true">

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>log/application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>log/application.%d{yyyy-MM-dd}.log</FileNamePattern>
    </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>%d{HH:mm:ss.SSS} [%31.31logger] [%-5level] [%28.-28thread] %msg %xEx %n</pattern>
        </encoder>
    </appender>

    <logger name="org" level="ERROR"/>

    <root level="DEBUG">
        <appender-ref ref="FILE" />
    </root>
</configuration>

在编辑配置(例如更改根日志级别或添加新记录器)之前,一切正常,之后日志记录完全停止。日志中没有打印任何内容,控制台中也没有显示 Logback 错误消息。Logback 已经处于调试模式,通过在服务器启动时将以下内容写入每个服务器的控制台来验证这一点:

18:06:37,949 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
18:06:37,951 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
18:06:37,957 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/opt/bea10/user_projects/KG/resources/config/logback.xml]
18:06:39,457 |-INFO in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@158ef4f  - Will scan for changes in file [/opt/bea10/user_projects/KG/resources/config/logback.xml] every 60 seconds.
18:06:39,457 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
18:06:39,471 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
18:06:39,556 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE]
18:06:40,061 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [rollingPolicy] on top of the object stack.
18:06:40,533 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
18:06:40,563 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern log/application.%d{yyyy-MM-dd}.log for the active file
18:06:40,652 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'log/application.%d{yyyy-MM-dd}.log'.
18:06:40,652 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
18:06:40,654 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Wed Oct 20 17:43:20 EEST 2010
18:06:40,685 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [encoder] on top of the object stack.
18:06:41,256 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - Active log file name: log/application.log
18:06:41,257 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - File property is set to [log/application.log]
18:06:41,307 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org] to ERROR
18:06:41,307 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [org] to true
18:06:41,307 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
18:06:41,308 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [FILE] to Logger[ROOT]
18:06:41,351 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

Logback 的版本是 0.9.24,slf4j 是 1.6.0,Weblogic 是 10.3(怀疑是否重要),Java 是 1.6.0_12。操作系统是 Solaris。我什至试着把 Java 选项

-XX:-UseVMInterruptibleIO

因为这被建议用于 Solaris 上的 Logback 问题但这并没有帮助。

有没有办法使这项工作?让两台服务器写入同一个日志文件是不是一个坏主意?

4

3 回答 3

2

正如 Alex Poole 之前提到的,谨慎模式应该会有所帮助。还强烈建议注册一个状态监听器,例如OnConsoleStatusListener,以便可以报告在应用程序生命周期内发生的问题,以及在初始化 logback 之后。

如果修改后的配置文件格式不正确,则 logback 版本0.0.29及更高版本将恢复为之前格式正确的配置文件。您没有提到新的配置文件存在格式正确的问题,这就是为什么谨慎模式可能是最相关的响应。

于 2010-10-24T13:51:17.457 回答
1

prudent 物业有帮助吗?它增加了开销,但可以解决多个 JVM 的问题。我不确定您的症状是否完全匹配,但可能值得一试。

于 2010-10-22T22:22:18.183 回答
0

我们有一个类似的问题,有时在重新部署应用程序时 logback 会停止日志记录。因此,我们在每次部署后重新启动应用程序服务器。这解决了这个问题。

由于重启 Prod 服务器总是很困难,经过进一步调查和搜索,我们发现旧版本的 logback 是否存在问题。我们已将版本从 1.1.7 更改为 1.1.10,它解决了问题

于 2018-03-30T09:35:38.340 回答