2017-08-06 285 views
0

我試圖使用spring IOC初始化log4j記錄器,並使用PropertyConfigurator.configure來配置記錄器,但PropertyConfigurator.configure不起作用。 記錄器是使用默認配置創建的,記錄文件不會被創建。PropertyConfigurator.configure不適用於彈簧

我的問題是如何將配置(log4j.properties)傳遞給Logger類?

的pom.xml

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.3.9.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
      <version>1.5.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
      <version>1.5.5.RELEASE</version> 
    </dependency> 

Confugration類

@Configuration 
public class CommonConfig { 

@Autowired 
private Environment env; 

@PostConstruct 
public void init() { 
    PropertyConfigurator.configure("log4j.properties"); 
} 

@Bean(name = "debugLogger") 
public Logger debugLogger() { 
    return Logger.getLogger("regDebug"); 
} 

@Bean(name = "infoLogger") 
public Logger infoLogger() { 
    return Logger.getLogger("regOperational"); 
} 

@Bean(name = "errorLogger") 
public Logger errorLogger() { 
    ic Logger infoLogger() { 
    return Logger.getLogger("regError"); 
}} 

log4j.properties

log4j.logger.regDebug=DEBUG , stdout, regDebug 
log4j.logger.regOperational=INFO, stdout , regOperational 
log4j.logger.regError=ERROR , stdout , regError 
log4j.rootLogger = INFO, console, regDebug, regOperational, regErro 
log4j.appender.fileAppener=org.apache.log4j.RollingFileAppender 

# STDOUT appender 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

#DEBUG LEVEL 
log4j.appender.regDebug.Append=true 
log4j.appender.regDebug=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.regDebug.Append=true 
log4j.appender.regDebug.File=D:/Code/log/COMMON_DEBUG.log 
log4j.appender.regDebug.MaxFileSize=10MB 
log4j.appender.regDebug.MaxBackupIndex=10 
log4j.appender.regDebug.DatePattern='.'yyyy-MM-dd-HH'.log' 
log4j.appender.regDebug.layout=org.apache.log4j.PatternLayout 
log4j.appender.regDebug.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss.SSS} || %5p || %t || %C{1} || %M:%L || %m%n 

#INFO LEVEL 

log4j.appender.regOperational=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.regOperational.Append=true 
log4j.appender.regOperational.File=D:/Code/log/COMMON_ERROR.log 
log4j.appender.regOperational.DatePattern='.'yyyy-MM-dd-HH'.log' 
log4j.appender.regOperational.layout=org.apache.log4j.PatternLayout 
log4j.appender.regOperational.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss.SSS} || %5p || %t || %m%n 

#ERROR LEVEL 

log4j.appender.regError=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.regError.Append=true 
log4j.appender.regError.File=D:/Code/log/COMMON_ERROR.log 
log4j.appender.regError.DatePattern='.'yyyy-MM-dd-HH'.log' 
log4j.appender.regError.layout=org.apache.log4j.PatternLayout 
log4j.appender.regError.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss.SSS} || %5p || %t || %C{1} || %M:%L || %m%n 
+0

您可以將'init'方法修改爲static,並查看結果。 – dabaicai

+0

同樣的問題,沒有什麼不同 –

回答

3

春天引導通過spring-boot-starter-log4j依賴提供了Log4J的集成:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-log4j</artifactId> 
    <version>1.3.8.RELEASE</version> 
</dependency> 

但首先你需要排除默認春天啓動的日誌記錄機制:

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

此外,請確保您的log4j.properties位於src/main/resources下。在這種情況下,您不需要明確指定文件的路徑爲PropertyConfigurator,並且可以安全地刪除init()方法。

請注意Log4J 1.2.17是相當過時的 - 它reached the end of life in 2015。您可能需要考慮使用Log4J2,或者使用Logback - Spring Boot使用的默認日誌記錄機制。

+0

最後,我看到pom.xml聲明'spring-context'依賴,這可能會導致Spring版本之間的衝突。 Spring Boot已經依賴於Spring Core和Spring Context,所以不需要明確聲明它。 –

+0

謝謝@Aleksei Budiak –