Logbackの構成ファイルはクラスパス上にあるため、Eclipseプロジェクト固有であり、これは私が望むものではありません。複数のJava=ユーティリティを使用しており、それらのすべてが単一のプロジェクト(これはクラスパスを共有している)にあります)を使用しており、それらのいくつかに対して特定の構成を使用する必要があります。
変数置換とJoram設定を試しましたが、何もうまくいきませんでした。これはおそらく私のせいだったので、いつか解決するつもりですが、今のところ簡単な解決策が必要です。
オプション1:logback.configurationFileシステムプロパティを使用して、logback構成ファイルの場所を指定します。これにより、実際にはプロジェクトごとに複数の構成ファイルを持つことができます。 logback documentation にあるように、このプロパティの値は、URL、クラスパス上のリソース、またはアプリケーション外部のファイルへのパスにすることができます。例えば:
_-Dlogback.configurationFile=/path/to/config.xml
_
オプション2:変数置換を使用して、システムプロパティでログファイルの名前を設定します。例えば:
<file>/var/tmp/${mycompany.myapplication}.log</file>
_-Dmycompany.myapplication=SomeUtility
_オプション3:システムプロパティでロガーレベルを設定します。これにより、より多く/より少ないログを記録できます。例えば:
<logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
_-Dmycompany.logging.level=INFO
_オプション4:システムプロパティのコマンドラインパラメータをJavaに渡して、アペンダーを追加/削除します。これにより、さまざまな場所にログを記録できます。 条件付き処理にはjaninoが必要 であることに注意してください。例えば:
<appender-ref>
_を配置する場所ならどこでも、これをログバック構成ファイルに入れ、ref
値を独自の_<appender>
_ sの1つに変更します。<if condition="property("mycompany.logging.console").equalsIgnoreCase("true")"> <then><appender-ref ref="STDOUT"/></then></if>
-Dmycompany.logging.console=true
_システムプロパティに関しては、それらをJavaに_-D
_引数として渡します。
_Java -Dmy.property=/path/to/config.xml com.mycompany.MyMain
_
Spring Bootアプリケーションでは、logback構成ファイル内でSpringプロファイルを参照できます。
この記事 を参照してください。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProfile name="dev">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} | %5p | %logger{25} | %m%n
</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
...
Leonidas blog に基づく別のオプションを使用しました。オプションのプロパティファイル(environment.properties)があり、環境プロパティとカスタム構成(logback-env-test.xmlなど)が含まれています。これらのファイルはすべてクラスパス上にある必要があります。
プロパティファイルが存在し、logEnv
プロパティを定義している場合。
logEnv = dev66
logbackは、logback-env-dev66.xmlからカスタム構成を見つけて含めようとします
<included>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</included>
余計にそれはデフォルト(<else>
セクション)設定へのフォールバックになります。カスタム構成ファイルでは、<included>
ではなく<configuration>
タグが使用されていることに注意してください。
上記すべてを管理するlogback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds" debug="true">
<!-- To skip error if property file doesn't exist -->
<define name="propExists" class="ch.qos.logback.core.property.ResourceExistsPropertyDefiner">
<resource>environment.properties</resource>
</define>
<if condition='${propExists}'>
<then>
<property resource="environment.properties" />
</then>
</if>
<!-- If specific configuration exists, load it otherwise fallback to default (<else> section) -->
<define name="confExists" class="ch.qos.logback.core.property.ResourceExistsPropertyDefiner">
<resource>logback-env-${logEnv}.xml</resource>
</define>
<if condition='${confExists}'>
<then>
<include resource="logback-env-${logEnv}.xml"/>
</then>
<else>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</else>
</if>
</configuration>