web-dev-qa-db-ja.com

logback.xmlパスをプログラムで設定する

次のようにlogback.xmlのパスを設定できることを知っています。

システムプロパティとしてデフォルトの構成ファイルの場所を指定

「logback.configurationFile」という名前のシステムプロパティを使用して、デフォルトの構成ファイルの場所を指定できます。このプロパティの値は、URL、クラスパス上のリソース、またはアプリケーション外部のファイルへのパスです。

Java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1

しかし、どのようにコードでそれを行うことができますか?

41
shabby

次を使用できます。

System.setProperty("logback.configurationFile", "/path/to/config.xml");

ただし、ログバックがロードされる前に発生する必要があります。

class Main {
  static { System.setProperty("logback.configurationFile", "/path/to/config.xml");}
  private final Logger LOG = LoggerFactory.getLogger(Main.class);

  public void main (String[] args) { ... }
}

注:テストしていませんが、動作するはずです。

47
assylias
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
JoranConfigurator configurator = new JoranConfigurator();
InputStream configStream = FileUtils.openInputStream(logbackPropertiesUserFile);
configurator.setContext(loggerContext);
configurator.doConfigure(configStream); // loads logback file
configStream.close();
50

環境変数の変更が常に実行可能であるとは限りません。適切に行うには、logbackマニュアルを参照してください。

http://logback.qos.ch/manual/configuration.html#joranDirectly

11
Amin Abbaspour

最後に、ジャージースプリングアプリで行ったことを共有したいだけです。

MyWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(final ServletContext servletContext) throws ServletException {
        servletContext.addListener(new LogbackConfigListener());
        try { LogbackConfigurer.initLogging(servletContext.getRealPath("/WEB-INF/logback.xml")); }
        catch (FileNotFoundException | JoranException e) { e.printStackTrace(); }
    }
}

私も追加しなければなりません

<dependency>
    <groupId>org.logback-extensions</groupId>
    <artifactId>logback-ext-spring</artifactId>
    <version>0.1.4</version>
    <scope>compile</scope></dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
    <scope>compile</scope></dependency>

ランタイム(私の場合は親プロジェクト)からコンパイルします。

3
sschrass

logback-spring.xmlでパスを変更する別のlogback xmlを含めます

include resource = "/path/to/logback.xml"

included内のタグを追加logback.xml内のタグ

0
Himanshu Soni