Log4J API无法在Java程序中打印消息

时间:2019-02-11 10:35:46

标签: java log4j

我正在尝试在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,但没有看到调试消息。

任何人都可以让我知道我在这里犯的错误吗?

2 个答案:

答案 0 :(得分:0)

尝试将您的logger属性重命名为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

答案 1 :(得分:0)

您的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, ...