3

プログラムで LogBack のRollingFileAppender( ch.qos.logback.core.rolling.RollingFileAppender) を構成しようとしていますが、機能していないようです。を使用している場合FileAppender、すべてがまったく同じ構成 (ポリシー/トリガーが少ない) で正常に機能しているように見えるので、権限の問題ではないと推測しています。すべてのポリシー構成をコメントアウトしようとしましたが、それも役に立ちませんでした。以下は私のサンプルコードで、ハードコードされた値がいくつかあります。また、エラーはまったくありません。LogBack のソース コードをデバッグしたところ、問題が発生した可能性があるものは何も見つかりませんでした。

ヒントはありがたいです。私の組織では制限があるため、構成ファイルなしでこれを機能させる必要があります。これを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");
4

1 に答える 1

6

主な問題は次のとおりです。

  • RollingFileAppender持つ必要がありますRollingPolicy
  • RollingFileAppenderPatternLayoutEncoder代わりに必要PatternEncoder
  • RollingPolicyも開始する必要があります。そうしないと、特定のプロパティが null になります

BasicStatusManagerこれを理解するのを非常に困難にしたのは、エラーメッセージを出力する方法を理解できなかったことです. すべてを印刷するには、次のコードを使用する必要がありました。

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

上記のコメントで述べたように、LogBack ログ メッセージが出力されない理由については別のスレッドが進行中です。Nabble とのメール スレッドもあります。私または誰かがこれを理解できるようになり次第、そのスレッドに解決策を投稿します。

于 2011-12-13T23:24:07.283 に答える