2016-08-09 82 views
6

Chciałbym zmienić niektóre właściwości z pliku log4j2.xml w zależności od mojego application.properties, więc na przykład zdefiniuj niektóre właściwości, a następnie zastąpić w log4j2 te właściwości, które są parametrami.Jak dokonać log4j2 konfigurowalny przez środowisko przy użyciu rozruchu sprężyny 1.3.6.RELEASE

Podbiegłam różnymi podejściami, ale nadal nie udało mi się uzyskać właściwej odpowiedzi. Chciałbym mieć różne konfiguracje w zależności od środowiska (DEV, QA lub PROD). Czy ktoś może mi doradzić, jak to osiągnąć?

Tak, staram się mieć to w moim właściwości

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

Proszę znaleźć mój przykładowy log4j2 poniżej ...

<?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> 

Dzięki

Odpowiedz

7

Właściwości elementu Lookup pozwala odnieść właściwości z właściwościami zewnętrznych plik w konfiguracji log4j. Dla przykładu powinno być coś takiego:

  1. Plik env.properties zawiera następujące właściwości:

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

na wyszukanie właściwości powinny być zdefiniowane jako właściwości 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> 

Teraz właściwości mogą być przekazywane w aplikacjach z notacją $ {property_name}. Każda referencja właściwości będzie interpolowana z rzeczywistą wartością z env.properties.

Możesz znaleźć inny przykład wyszukiwania właściwości here.

+0

Dzięki za odpowiedź, działa. Nadal mam inne pytanie, a jeśli mam wiele plików właściwości (w zależności od środowiska, na przykład application.properties, właściwości aplikacji deweloperskich itp.), Czy istnieje sposób na przełączanie między plikami? Wydaje się, że log4j2 wybiera tylko domyślną aplikację.properties –

+0

Możesz utworzyć dedykowaną konfigurację log4j2 dla każdego pliku środowiska/właściwości: log4j2-env-dev.xml z env-dev.właściwości, log4j2-env-test.xml z env-test.properties itp. Możesz podać nazwę pliku konfiguracyjnego log4j2 jako argument jvm -Dlog4j.configurationFile = . – asch

+0

jeśli używasz 'env.yml', jak to zrobić? – Dreampie

0

Zapewnić log4j2 rozrusznik dodaje w ścieżce klas, a następnie usuń właściwości związane z rejestrowaniem w pliku application.properties, a następnie wiosna załaduje plik log4j2.xml z folderu zasobów. W ten sposób możesz mieć pełną kontrolę nad rejestrowaniem. Jeśli chcesz zastąpić wartości następnie odnieść this link

Uwaga :: Jeśli masz napęd w projekcie następnie wyjąć sprężyny startowego rejestratora rozrusznik

<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

Dzięki za szybką odpowiedź, ale aplikacja ładuje się dobrze log4j2.xml; ale nie zastępuje zmiennych wartościami, które mam w pliku właściwości –

+0

Oto dokumentacja substytutu ciągu, który log4j2 używa: https://logging.apache.org/log4j/log4j-2.2/log4j-core/apidocs /org/apache/logging/log4j/core/lookup/StrSubstitutor.html, upewnij się, że wartości, których używasz, nie są zdefiniowane na wiosnę. bo sprężyna rozruchowa ma inteligentny sposób ładowania wartości – rajadilipkolli