我想使用slf4j从.properties文件读取数据,我可以在控制台上输出数据,但我想要的是在某个文件上输出数据,所以我需要文件Appender,这是在.properties中声明的文件,我无法使用slf4j读取.properties文件。任何人都可以帮助。
PS:我需要一个例子来解释如何在slf4j中使用.properties文件以及如何初始化logger工厂。
答案 0 :(得分:5)
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。