2016-11-16 22 views
8

Benim spring-boot uygulamasında, günlüğe kaydetme için logback kullanıyorum. Uygulama, ortama özgü uygulama özelliklerini ayarlamak için harici application.properties dosyasını kullanır ve seçenekle başlar: -spring.config.location=path/to/file. Tüm ortam özelliklerinin tek bir yerde yönetilebilmesi için, geri dönüş yapılandırmasını oradan da özellikleri okumak istiyorum. Ben yaklaşım denedi Harici uygulama özellikleri dosyasında günlüğe kaydetme ortamına bağımlı özelliklerini denetleme

here açıklanan, ancak özellikler dosyası üzerinde sınıf olmadığından, ben hata alıyorum: Eksik bir şey

java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.joran.action.PropertyAction - Could not find resource [application.properties] 

var mı?

GÜNCELLEME:

<property file="path/to/file" /> 

Ama dosya yolunu hardcoding önlemek istiyoruz:

bu yapılandırmayı işleri ekleme.

cevap

3

eklenti sistemi ortam değişkeni, bu yüzden logback yapılandırma dosyasında

logback.configurationFile=path/to/config.xml 
+0

Sorgumun açık olmasaydı, ancak ortamlar arasında farklılık gösteren bir çift değerle birlikte bir oturum açma yapılandırma dosyasına sahip olmak isterdim. – javafan

1

için geri bu konuma düşüyor Biz spring-boot kullanmayın ama belki bu yaklaşım yararlı olabilir:

Bu LogbackConfigurator yarattı. Bu sınıf ContextRefreshedEvent dinleyerek uygulama başlangıcında yürütülen:

@Bean 
public LogbackTestConfigurator logbackConfigurator() 
{ 
    return new LogbackTestConfigurator(); 
} 
2

sen Bahar kullanarak olduğundan kullanabilirsiniz:

public class LogbackConfigurator implements ApplicationListener<ContextRefreshedEvent> 
{ 
    // configure your configuration file here 
    private static final String   LOGBACK_CONFIGURATION = "some/where/application.properties"; 


    @Override 
    public void onApplicationEvent(ContextRefreshedEvent event) 
    { 
     LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); 
     try 
     { 
      // creating JoranConfigurator 
      JoranConfigurator joranConfigurator = new JoranConfigurator(); 

      // setting logger context for JoranConfiguratior 
      joranConfigurator.setContext(loggerContext); 

      // resetting context, override default configuration 
      loggerContext.reset(); 

      // configuring Logback with resource 
      joranConfigurator.doConfigure(new Resource(LOGBACK_CONFIGURATION).getInputStream()); 
     } 
     catch (Exception exception) 
     { 
      // exception handling 
     } 
    } 
} 

fasulye idam etmek, bizim Java yapılandırmasında bu satırı eklendi Geri Bildirim Ver Daha fazla bilgi için aşağıdaki bağlantılardan birini kullanın: logback-ext-spring

Bu kitaplık temel olarak, bahar günlüğüne erişmenizi sağlayan yaylı geçişli nesnelere gerçek günlüğe kaydetme yetkisi verme olanağı sağlar. Environment değişkenlerine ve dolayısıyla application.properties'a erişebileceğiniz Spring konfigürasyonunda ekleyiciler oluşturabilir ve yapılandırabilirsiniz.

Sen GitHub sayfasında daha fazla bilgi bulabilirsiniz ama burada konsol appender için desen ortam özelliği "consolePattern" alınır bağlantı, sağlanan örnek dayalı bir örnek yapılandırma olabilir

:

logback .xml:

<configuration> 

    <appender name="consoleAppender" class="ch.qos.logback.ext.spring.DelegatingLogbackAppender"/> 

    <root level="INFO"> 
     <appender-ref ref="consoleAppender"/> 
    </root> 

</configuration> 

LogbackConfig.java:

import ch.qos.logback.classic.LoggerContext; 
import ch.qos.logback.classic.encoder.PatternLayoutEncoder; 
import ch.qos.logback.core.ConsoleAppender; 
import ch.qos.logback.ext.spring.ApplicationContextHolder; 
import org.slf4j.LoggerFactory; 
import org.springframework.core.env.Environment; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
public class LogbackConfig { 

    @Autowired 
    private Environment environment; 

    @Bean 
    public static ApplicationContextHolder applicationContextHolder() { 
     return new ApplicationContextHolder(); 
    } 

    @Bean 
    public static LoggerContext loggerContext() { 
     return (LoggerContext) LoggerFactory.getILoggerFactory(); 
    } 

    @Bean (initMethod = "start", destroyMethod = "stop") 
    public static PatternLayoutEncoder encoder (LoggerContext ctx) { 
     PatternLayoutEncoder encoder = new PatternLayoutEncoder(); 
     encoder.setContext(ctx); 
     encoder.setPattern(environment.getProperty("consolePattern"); 
     return encoder; 
    } 

    @Bean (initMethod = "start", destroyMethod = "stop") 
    public static ConsoleAppender consoleAppender (LoggerContext ctx, PatternLayoutEncoder encoder) { 
     ConsoleAppender appender = new ConsoleAppender(); 
     appender.setContext(ctx); 
     appender.setEncoder(encoder); 
     return appender; 
    } 
} 

Important
Please note that the spring bean name must match the name of the appender in the logback.xml , in the example "consoleAppender" . Also don't forget to specify the initMethod and destroyMethod .

Bu, yolu sabitlememenin yolunu bulmanıza yardımcı olur.Eğer Uygulamayı çalıştırmak için bahar çizme kullanıyorsanız,

2

yapabilirsiniz:

logback.xml

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <property file="${configuration.file.path}" /> 
    ....... 
</configuration> 

Sen "configuration.file.path" değiştirebilir, ancak bunu değiştirmek zorunda uygulamanızı çalıştırdıktan sonra adı.

Böyle özellik dosyada tanımlı özelliklerini kullanabilirsiniz

: uygulamanızı çalıştırdığınızda

-Dlogging.config=/some/path/logback.xml -Dconfiguration.file.path=/other/path/application.properties 

logging.config yayla faaliyete olan

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <Pattern> 
      %d{yyyy-MM-dd HH:mm:ss} - ${property.defined.in.property.file} - %msg%n 
     </Pattern> 
    </layout> 
</appender> 

<root level="${level.defined.in.property.file}"> 
    <appender-ref ref="STDOUT" /> 
</root> 

Ve VM param eklemek önyükleme yapılandırması, bu adı saklamanız gerekir. Uygulamanızdaki bir yapılandırmayı değiştirmeden bu dosyayı her uygulamada değiştirebilirsiniz. gibi

el komut satırı ile uygulamanızı çalıştırmak eğer

olmalıdır:

java -Dlogging.config=/some/path/logback.xml -Dconfiguration.file.path=/other/path/application.properties -jar app-1.0.0.jar ..... 

bu yaparak, tüm günlüğü yapılandırma dinamiktir, ve uygulamayı çalıştırdığınızda veriyorsun. Farklı yapılandırmalara sahip farklı örneklere sahip olabilirsiniz

İlgili konular