2011-12-07 2 views
3

LogBackのRollingFileAppenderch.qos.logback.core.rolling.RollingFileAppender)をプログラムで設定しようとしていますが、動作していないようです。私がFileAppenderを使用しているとき、すべてがまったく同じ構成(ポリシー/トリガーが少ない)で正常に動作しているように見えるので、許可の問題ではないと推測しています。私はすべてのポリシー設定をコメントアウトしてみましたが、どちらも役に立たなかった。以下はハードコードされた値を持つサンプルコードです。また、これまで全く何のエラーもありません。 LogBackのソースコードをデバッグすると、間違っている可能性のあるものは見られませんでした。LogBack RollingFileAppenderがログファイルを書き込んでいない(FileAppenderは機能しますが)

ヒントは参考になります。私は設定ファイルなしでこれを動作させる必要があります。これは私の組織の制限だからです。私はこれをMacBookでテストしています。

Logger logger = (Logger)LoggerFactory.getLogger(applicationName); 
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
lc.reset(); 

RollingFileAppender<ILoggingEvent> fileAppender = 
    new RollingFileAppender<ILoggingEvent>(); 
fileAppender.setAppend(true); 
fileAppender.setFile("/Users/Jack/Desktop/logs/" + applicationName + ".log"); 
fileAppender.setContext(lc); 

SizeBasedTriggeringPolicy<ILoggingEvent> rPolicy = 
    new SizeBasedTriggeringPolicy<ILoggingEvent>("20MB"); 
fileAppender.setTriggeringPolicy(rPolicy); 
TimeBasedRollingPolicy<ILoggingEvent> tPolicy = 
    new TimeBasedRollingPolicy<ILoggingEvent>(); 
tPolicy.setFileNamePattern("/archive/" + applicationName + ".%d"); 
tPolicy.setMaxHistory(180); 
tPolicy.setParent(fileAppender); 
tPolicy.setContext(lc); 

PatternLayout pl = new PatternLayout(); 
pl.setPattern("%d %5p %t [%c:%L] %m%n)"); 
pl.setContext(lc); 
pl.start(); 

fileAppender.setLayout(pl); 
fileAppender.start(); 

logger.addAppender(fileAppender); 
logger.setLevel(Level.DEBUG); 

logger.debug("Test message"); 
+0

私は問題を把握しました。私は、appenderが決して開始しないようにRollingPolicyを設定するのを忘れていました。私はこの部分を見落としたので、開始できないときに例外をスローすると仮定しました。 – juminoz

+0

これは先週、RollingPolicyを設定した後に正常に機能していて、突然停止しました。私は現在、デバッグモードをプログラムで有効にして、何が起こっているかを確認する方法を探しています。 FileAppenderはまだ動作しているので、間違いなく許可の問題はありません。もう1つのスレッドがここにあります。 http://stackoverflow.com/questions/8482359/programmatically-enable-logback-in-debug-mode – juminoz

答えて

5

重要な問題は以下の通りです:

  • RollingFileAppenderRollingPolicy
  • RollingFileAppender代わりPatternEncoder
  • RollingPolicyPatternLayoutEncoderを必要とするも開始しなければならないか、または特定のプロパティが
nullになります持っている必要があります

これを理解するのが非常に難しくなったのは、どうすればエラーメッセージを出力するのかわかりませんでした。BasicStatusManager私はすべてを印刷するために次のコードを使用する必要がありました。

for(Status status : logger.getLoggerContext().getStatusManager().getCopyOfStatusList()){ 
    System.out.println(status.getOrigin() + " - " + status.getMessage()); 
} 

LogBackのログメッセージが表示されない理由について、上記のコメントに記載されているように別のスレッドが発生しています。また、Nabbleと電子メールのスレッドがあります。私は誰かがこれを理解できるようになるとすぐにそのスレッドに解決策を投稿します。

+0

本当に便利な答え。 'RollingFileAppender'を起動する前に追加したいのですが、最初に' RollingPolicy'の親を 'RollingFileAppender'インスタンスに設定してからローリングポリシーを' start() 'する必要があります。この順番でなければならない。 –

関連する問題