web-dev-qa-db-ja.com

SLF4J-ログバック:実行時にロガーを構成する方法

プロジェクトでLogBackを使用しています。データベースの値に応じてロガーを設定します。つまり、DB値がtrueに設定されている場合、ロガーはファイルとDBアペンダーの両方を使用する必要があります。falseの場合、ロガーはDBアペンダーのみを使用する必要があります、

また、静的な最終ロガーの使用を維持したいので、ロガーが呼び出されるたびに新しいインスタンスを作成しません。

どうすればこのようなことができますか?

よろしく、

26
Amr Faisal

この例 の説明に従って、プログラムでLogbackを構成する必要があります。

public class Main {

   public static void main(String[] args) {
     Logger logger = (Logger) LoggerFactory.getLogger("abc.xyz");

     LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
     FileAppender<LoggingEvent> fileAppender =
                       (FileAppender<LoggingEvent>) logger.getAppender("file");
     if(fileAppender != null) {
       fileAppender.stop();
       fileAppender.setFile("new.log");
       PatternLayout pl = new PatternLayout();
       pl.setPattern("%d %5p %t [%c:%L] %m%n)");
       pl.setContext(lc);
       pl.start();
       fileAppender.setLayout(pl);
       fileAppender.setContext(lc);
       fileAppender.start();
     }
     ... etc    
   }
}
19
fglez

データベースから構成プロパティを読み取る背後に特別な理由はありますか? 1つの提案は、JNDIを使用することです。 Logbackは、タグを使用してJNDI構成値を読み取ることができます。

1
Andy Dufresne