首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PropertyConfigurator.configure不能与spring一起使用

PropertyConfigurator.configure不能与spring一起使用
EN

Stack Overflow用户
提问于 2017-08-06 19:07:32
回答 1查看 1.5K关注 0票数 1

我尝试使用spring IOC初始化log4j记录器,并使用PropertyConfigurator.configure配置记录器,但PropertyConfigurator.configure不起作用。记录器是使用默认配置创建的,而不是创建日志文件。

我的问题是如何将配置(log4j.properties)传递给Logger类?

pom.xml

代码语言:javascript
复制
<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类

代码语言:javascript
复制
@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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-06 20:08:26

Spring Boot通过spring-boot-starter-log4j依赖提供与Log4J的集成:

代码语言:javascript
复制
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-log4j</artifactId>
   <version>1.3.8.RELEASE</version>
</dependency>   

但首先,您需要排除默认的Spring Boot日志记录机制:

代码语言:javascript
复制
<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()方法。

请注意- it reached the end of life in 2015的Log4J 1.2.17已经相当过时了。您可能希望考虑使用Log4J2,或者继续使用Logback - Spring Boot使用的默认日志记录机制。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45531375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档