2

マルチサーバー Weblogic 環境での Logback の使用を評価しています。1 台のマシンで、2 つの Weblogic サーバー インスタンス (基本的には 2 つの別個の 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 です。OSはソラリスです。Javaオプションを入れてみました

-XX:-UseVMInterruptibleIO

これは、Solaris でのログバックの問題に対してここで提案されたためですが、これは役に立ちませんでした。

これを機能させる方法はありますか?2 つのサーバーが同じログ ファイルに書き込むことは、まったく悪い考えですか?

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 に答える