【问题标题】:Log4J API not printing messages in the java programLog4J API 不在 java 程序中打印消息
【发布时间】:2019-07-04 19:57:27
【问题描述】:

我正在尝试在我的 java 项目中实现 Log4J API。 为此,我创建了如下图所示的属性(以黄色突出显示): Project Structure Image

这些是我在文件中设置的属性:

# TRACE < DEBUG < INFO < WARN < FATAL
log4j.rootLogger=TRACE, DEBUG, INFO, file

# Console
# log4j.appender.toConsole=org.apache.log4j.ConsoleAppender
# log4j.appender.toConsole.layout=org.apache.log4j.PatternLayout
# log4j.appender.toConsole.layout.ConversionPatter=%d{HH:mm:ss} %5p [%t] - $c.%M - %m%n

# Redirecting 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=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

我在班级中声明了 LOGGER 对象如下:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class Credits{

    Logger LOGGER = null;
    public Credits(String sources) {
        LOGGER = Logger.getLogger(ChunkRecon.class.getName());
        LOGGER.setLevel(Level.DEBUG);
        String  creditNames = "select tablename, creditNumbers, credit_type from schema.table where credit_type in ("sources")";
        LOGGER.debug("This is a debug message");
        system.out.println("This message is from println");
    }
}

在输出中,我看到来自 sysout 的消息:This message is from println,但没有看到调试消息。

谁能告诉我我在这里做错了什么?

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    尝试将您的 loggerproperties 重命名为 log4j.properties 并检查它是否在类路径中。 rootLogger的另一个问题,见explanation here

    Logger 通常也用作静态变量。例如:

    public class Credits {
    
        private static final Logger logger = Logger.getLogger(Credits.class);
    
        public Credits(String sources) {
            logger.setLevel(Level.DEBUG);
            logger.debug("This is a debug message");
    
            System.out.println("This message is from println");
        }
    }
    

    log4j.properties

    log4j.rootLogger=debug, stdout
    
    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
    

    【讨论】:

    • 如果我将其设为静态或私有静态,编译器会说:参数 LOGGER 的非法修饰符;只允许final。更改文件名也不会产生任何影响。
    【解决方案2】:

    您的log4j.rootLogger 声明似乎不正确。试试看-

    log4j.rootLogger=TRACE,stdout,file
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    

    如果您只希望控制台上的日志,则完全删除文件日志记录。

    log4j.rootLogger=TRACE,stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    

    请参阅从JavaDoc 配置记录器部分。
    配置根记录器的语法是:

    log4j.rootLogger=[level], appenderName, appenderName, ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      相关资源
      最近更新 更多