如何使用slf4j读取.properties文件?

时间:2011-12-20 07:49:52

标签: java logging slf4j

我正在尝试制作一个简单的程序,它读取属性文件并将输出记录到控制台,但我无法做到。

这是我的班级:

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

public final class Slf4jSample {

    public static void main(final String[] args) {
        final Logger logger = LoggerFactory.getLogger(Slf4jSample.class);

        logger.info("Hello World!");
    }

    private Slf4jSample() {
    }
}

这是我的属性文件:

log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.logger.Slf4jSample=INFO, A1

当我运行它时会出现此异常:

log4j:WARN No appenders could be found for logger (com.slf4j.Slf4jSample).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

2 个答案:

答案 0 :(得分:4)

“log4j:WARN无法找到appender ...”消息表明SLF4J与log4j绑定正确,但log4j无法加载log4j.properties文件。 SLF4J不是这里的问题。只需将log4j.properties放在类路径上即可。

答案 1 :(得分:3)

考虑到你使用slf4j和log4j作为底层日志库,并且你的类路径上同时有slf4j-log4j.jar和log4j.jar,那么你需要指定log4j.properites文件的位置。

Ceki提到将log4j.properties放在你的类路径上,它应该自动拾取它。如果这不适合您(它应该),或者您需要log4j.properties存在于类路径之外,那么您可以在执行代码时将-Dlog4j.configuration=log4j.properties添加到JVM参数中。此变量的值可以是完整路径,也可以是您执行的当前目录的相对值。

例如,在我的IDE中执行JUnit测试时,我通常会在运行配置文件中将其添加为JVM参数,以确保它获取不在我的Java项目中的属性文件(即不在类路径中)

-Dlog4j.configuration=file:/C:/java/workspace/logs/log4j.properties