使用slf4j读取.properties文件

时间:2011-12-12 13:18:39

标签: java logging slf4j

我想使用slf4j从.properties文件读取数据,我可以在控制台上输出数据,但我想要的是在某个文件上输出数据,所以我需要文件Appender,这是在.properties中声明的文件,我无法使用slf4j读取.properties文件。任何人都可以帮助。

PS:我需要一个例子来解释如何在slf4j中使用.properties文件以及如何初始化logger工厂。

3 个答案:

答案 0 :(得分:5)

请参阅http://slf4j.org/faq.html

  

SLF4J只是一个外观,意味着它不提供完整的   记录解决方案配置appender或设置等操作   使用SLF4J无法执行日志记录级别。

slf4j-simple根本不提供额外的配置功能。<​​/ p>

对于其他实现,您应该使用它们提供的配置方式。

例如,slf4j-log4j的log4j.properties。请参阅http://logging.apache.org/log4j/1.2/manual.html#Configuration

答案 1 :(得分:3)

如果使用log4j,也可以使用“Log4jLoggerAdapter”,定义.properties文件的配置。 代码如下。

所需的罐子:

slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar

If desired the source code (useful when debugging):
slf4j-api-1.7.5-sources.jar
slf4j-log4j12-1.7.5-sources.jar

测试java类:

import org.apache.log4j.PropertyConfigurator; 
import org.slf4j.LoggerFactory;
import org.slf4j.impl.Log4jLoggerAdapter;


public class Slf4j_log4j_main {

    private static Log4jLoggerAdapter log = (Log4jLoggerAdapter) LoggerFactory.getLogger(Slf4j_log4j_main.class);

    public static void main(String[] args) {
        PropertyConfigurator.configure(Slf4j_log4j_main.class.getClassLoader().getResource("basic/log4j.properties"));
        log.debug( "a debug" );
        log.info( "an info" );
        log.warn("a warn");
        log.error("an error");
        //log.fatal("a fatal");  // slf4j misses fatal log.
        log.trace("a fatal");
        System.out.println("");
        System.out.println("[INFO]: done");
    }
}

basic / log4j.properties

#@FROM: log4j_slf4j.basic
#@BASED: [BIN319P17]/[BIN319P42]
#using your own named logger.

# defining appender file
log=/home/alsdias/work/dev/java/lab/slf4j/log4j/log4j_slf4j/src/basic

# root logger setup
log4j.rootLogger = DEBUG, A1, FILE

#setting your own named logger. If more loggers, set additivity false (below)
log4j.logger.log4j.level=INFO,A1
log4j.additivity.log4j.level=false

# console appender config
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

# file appender config
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

#setting the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true
#setting the threshold
log4j.appender.FILE.Threshold=debug
#setting the append to false, overwrite
log4j.appender.FILE.Append=false

#set a layout for the appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d [%t] %-5p %c - %m%n

生成的输出:

2013-06-14 11:47:00,473 [main] DEBUG basic.Slf4j_log4j_main - a debug
2013-06-14 11:47:00,474 [main] INFO  basic.Slf4j_log4j_main - an info
2013-06-14 11:47:00,474 [main] WARN  basic.Slf4j_log4j_main - a warn
2013-06-14 11:47:00,475 [main] ERROR basic.Slf4j_log4j_main - an error

[INFO]: done

答案 2 :(得分:1)

slf4j是一个API - 如果你认为它只包含接口而没有类,那么你就不远了。

您需要的行为是在接口的实现中,对于slf4j可能是logback,AVSL,JDK14(java.util.logging),log4j或Simple。有些人可以阅读属性,有些则无法阅读。

对于logback,您可以使用

<property file="src/main/java/chapters/configuration/variables1.properties" />

有关详细信息,请参阅http://logback.qos.ch/manual/configuration.html#definingProps