【问题标题】:Why is there Log4j output to the console from other code, but not from my code?为什么其他代码有 Log4j 输出到控制台,而不是我的代码?
【发布时间】:2020-05-29 21:31:21
【问题描述】:

我有一个使用 Eclipse/STS 和 Spring MVC 构建的 Web 应用程序。

我正在使用 slf4j 和 log4j 进行日志记录。

这是我的 log4j.properties 文件...我知道它正在被使用,因为我在日期模式中添加了文本“MY TEST PROPS FILE”并且它出现在日志中...

# Root logger option
log4j.rootLogger=DEBUG, INFO, WARN, ERROR, stdout, file

# Redirect log messages to console
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=MY TEST PROPS FILE - %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

当我运行我的网络应用程序时,控制台输出如下所示...您可以在输出中看到“MY TEST PROPS FILE”...

MY TEST PROPS FILE - 2020-05-29 17:18:36 DEBUG BasicResourcePool:422 - decremented pending_acquires: 0
MY TEST PROPS FILE - 2020-05-29 17:18:36 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@468f3122 [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@642b4cb2)
MY TEST PROPS FILE - 2020-05-29 17:18:36 DEBUG NewProxyConnection:1260 - com.mchange.v2.c3p0.impl.NewProxyConnection@71cf92cb: close() called more than once.
MY TEST PROPS FILE - 2020-05-29 17:18:36 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@468f3122 [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@642b4cb2)
MY TEST PROPS FILE - 2020-05-29 17:18:36 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@468f3122 [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@642b4cb2)

我的问题是,我从代码中尝试的日志记录没有出现在控制台输出中。

我正在这样做......

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/* ... */

    private static Logger logger = LoggerFactory.getLogger(WebController.class);

/* ... */

    @RequestMapping(value={"", "/", "showhome"}, method={RequestMethod.POST,RequestMethod.GET})
    public ModelAndView showHome(Model model) {

        logger.info("########### TEST LOG INFO");
        logger.error("########### TEST LOG ERROR");
        logger.warn("########### TEST LOG WARN");
        logger.debug("########### TEST LOG DEBUG");

/* ... */
    }

我一定错过了一些简单的东西。为什么我的测试记录器调用没有出现在控制台输出中?

更新 - 找到解决方案:我找到了解决方案并将其作为答案发布在下面。

【问题讨论】:

    标签: eclipse spring-mvc log4j slf4j


    【解决方案1】:

    我找到了解决问题的方法。

    我通过将它放在我的 pom.xml 中更改为 log4j2 ...

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.7</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.7</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.7</version>
    </dependency>
    

    然后我创建了一个这样的 log4j2.properties 文件...

    status = error
    name = PropertiesConfig
    
    filters = threshold
    
    filter.threshold.type = ThresholdFilter
    filter.threshold.level = debug
    
    appenders = console
    
    appender.console.type = Console
    appender.console.name = STDOUT
    appender.console.layout.type = PatternLayout
    appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
    rootLogger.level = debug
    rootLogger.appenderRefs = stdout
    rootLogger.appenderRef.stdout.ref = STDOUT
    

    现在工作。

    大家干杯。

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 2020-08-14
      • 2017-08-28
      • 2022-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 2021-03-21
      相关资源
      最近更新 更多