SpringBootプロジェクトを使用しています。
環境:
ch.qos.logback:logback-core:jar:1.1.5
ch.qos.logback:logback-classic:jar:1.1.5
org.springframework.boot:spring-boot-starter-logging:jar:1.3.3.RELEASE
私のプロジェクトでは、application.yml(application-dev.ymlおよびapplication-production.yml)でプロパティを使用しています
Logback Spring拡張機能はSpringの前に開始されるため、spring.profiles.activeをlogback.xmlファイルに挿入できません。
これは私のlogback.xmlファイルのより単純なバージョンです:
<configuration scan="true">
<property name="LOG_PATH" value="/var/log/" />
<property name="APP_NAME" value="xyz" />
<property name="PROFILE" value="-${spring.profiles.active}" />
<property name="CHARSET" value="utf-8" />
<property name="PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<appender name="APP-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}${APP_NAME}${PROFILE}.log</file>
<encoder>
<charset>${CHARSET}</charset>
<Pattern>${PATTERN}</Pattern>
</encoder>
</appender>
<logger name="a.b.c" level="INFO">
<appender-ref ref="APP-FILE" />
</logger>
<root level="INFO">
<appender-ref ref="APP-FILE"/>
</root>
私が探しているプロファイルは、プロパティspring.profiles.activeです。
私の目標は、ディレクトリにログファイルを作成することです/ var/logファイルxyz-devまたはxyz-productionですが、取得しますxyz-spring.profiles.active_IS_UNDEFINED.logもちろんではありません。
アプローチ:
1-次のようなコンポーネントを使用する:
@Component
public class InitializationService implements ApplicationListener<ContextRefreshedEvent> {
// inject spring profile active into logback.xml
}
ログバックSpring拡張機能はSpringBootアプリケーションの前に開始されるため、もちろん機能していません。
2-このようにlogback.xmlのプロパティを使用する
<file>${LOG_PATH}${APP_NAME}${PROFILE}.log</file>
結果はxyz-spring.profiles.active_IS_UNDEFINED.logです。
これは答えるのに少し遅れていますが、「logback.xml」ファイルの名前を「logback-spring.xml」に変更することでSpringプロファイルを正常にログに記録し、この(はるかに)簡略化されたバージョンのようにプロファイルにアクセスしました
<springProperty scope="context" name="ACTIVE_PROFILE" source="spring.profiles.active"/>
<appender name="GRAYLOG" class="com.github.pukkaone.gelf.logback.GelfAppender">
<additionalField>environment=${ACTIVE_PROFILE}</additionalField>
</appender>
<root level="WARN">
<appender-ref ref="GRAYLOG" />
</root>
「logback-spring.xml」がプロファイル情報を取得できるようです。
特定の ドキュメントはここにあります 。
logging.file=blah.log
を定義できます。 公式ドキュメント を参照してください。-DLOG_FILE=blah.log
を渡すこともできます。プロファイルを使用すべきでない理由:
あなたがやろうとしているのは、春のプロファイルが作成された目的ではありません。これらは、起動時に動作をアクティブ化/非アクティブ化するためにBeanのオン/オフを切り替えるために必要です。 プロファイルは、テストするものと本番環境で機能するものが異なるため、一般的には推奨されません(ただし、他に選択肢がない場合もあります)。 元の発表 の警告セクションを参照してください。
プロファイルの使用に関するもう1つの問題は、複数のプロファイルを同時にアクティブ化できることです。プロファイルは、無関係な小さなパーツのオン/オフを切り替えるために作成されました。例えば。 spring.profiles.active=cache-off,perf-monitoring-on
またはそのようなもの。
それでも、プロファイルを定義して、そのプロファイル内にlogging.file=prod.log
プロパティを設定できます。それはまだ非常に悪いことであり、プロファイルの使用方法ではありませんが、それはより良いことです。
これが私のプロジェクトのために私がしたことです。 logback.xml
の内部
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property resource="application.properties"/>
次に、application.propertiesファイルで定義されているプロパティを使用できます。 ${MY-PROPERTY}
application.propertiesに、ログファイルの名前のプロパティがあります。
yaml
ファイルはログバックの初期化後に解釈されるため、これはapplication.yml => YAML
プロパティファイルでは機能しません。