web-dev-qa-db-ja.com

Spring Boot1.3.6.RELEASEを使用して環境ごとにlog4j2を構成可能にする方法

Application.propertiesに応じてlog4j2.xmlファイルからいくつかのプロパティを変更したいので、たとえば、いくつかのプロパティを定義してから、log4j2でパラメータであるプロパティを置き換えます。

私はさまざまなアプローチを実行しましたが、それでも正しいことがわかりません。環境(DEV、QA、またはPROD)に応じて異なる構成を使用したいと思います。誰かがこれを達成する方法を教えてもらえますか?

だから、私はこれを私のプロパティに入れようとしています

#Place holders for log4j2.xml file
log.file.path=/opt/Tomcat/logs
log.file.name=dummydummy
log.file.size=100 MB
log.level=DEBUG

以下の私のlog4j2サンプルを見つけてください...

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="PID">????</Property>
        <property name="name">my-log</property>
    </Properties>
    <Appenders>
        <RollingFile name="file" fileName="${log.file.path}${log.file}.log"
            filePattern="${log.file.path}${log.file}-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout
                pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${sys:PID} --- [%t] %c{1}(%M:%L) : %m%n%wEx" />
            <Policies>
                <TimeBasedTriggeringPolicy /><!-- Rotated everyday -->
                <SizeBasedTriggeringPolicy size="${log.file.size}" /> <!-- Or every 100 MB -->
            </Policies>
        </RollingFile>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout
                pattern="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{Magenta} %clr{---}{faint} %clr{[%t]}{faint} %clr{%c{1}(%M:%L)}{cyan} %clr{:}{faint} %m%n%wEx" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="org.hibernate.validator.internal.util.Version"
            level="warn" />
        <Logger name="org.Apache.coyote.http11.Http11NioProtocol" level="warn" />
        <Logger name="org.Apache.Tomcat.util.net.NioSelectorPool" level="warn" />
        <Logger name="org.Apache.catalina.startup.DigesterFactory" level="error" />
        <Logger name="org.springframework.web" level="error" />

        <Root level="${log.level}">
            <AppenderRef ref="Console" />
            <AppenderRef ref="file" />
        </Root>
    </Loggers>
</Configuration>

ありがとう

8
Rogelio Blanco

プロパティルックアップ要素を使用すると、log4j構成の外部プロパティファイルからプロパティを参照できます。あなたの例では、次のようになります。

  1. ファイルenv.propertiesには、次のプロパティが含まれています。

    log.file.path=/opt/Tomcat/logs
    log.file.name=dummydummy
    log.file.size=100 MB
    log.level=DEBUG
    

プロパティルックアップは、log4j2.xmlのプロパティとして定義する必要があります。

<Configuration>  
  <Properties>  
      <property name="log.file.path">${bundle:env:log.file.path}</property>  
      <property name="log.file.name">${bundle:env:log.file.name}</property>  
      <property name="log.file.size">${bundle:env:log.file.size}</property>  
      <property name="log.level">${bundle:env:log.level}</property>   
  </Properties>  

これで、プロパティは$ {property_name}表記のアペンダーで参照できるようになりました。各プロパティ参照は、env.propertiesからの実際の値で補間されます。

プロパティルックアップの別の例を見つけることができます ここ

10
asch

Log4j 2.13.0以降、Log4j 2は、Spring CloudConfigサポートの一部としてSpringLookupを提供するようになりました。これにより、log4j2.xmlのSpringBootアプリケーションのapplication.propertiesまたはapplication.ymlファイルで定義されたプロパティを参照できるようになります。

0
rgoers

Log4j2スターターがクラスパスに追加されていることを確認してから、application.propertiesのロギング関連プロパティを削除すると、springはリソースフォルダーからlog4j2.xmlをロードします。このようにして、ロギングを完全に制御できます。値を代入したい場合は、 このリンク を参照してください

注::プロジェクトにアクチュエーターがある場合は、スプリングブートロガースターターを削除します

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
0
rajadilipkolli