Slf4j使用
SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
slf4j的helloworld
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String [] args){
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info(“Hello World”);
}
}
slf4j典型示例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Wombat {
final Logger logger = LoggerFactory.getLogger(Wombat.class);
Integer t;
Integer oldT;
public void setTemperature(Integer temperature) {
oldT = t;
t = temperature;
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
if(temperature.intValue() > 50) {
logger.info("Temperature has risen above 50 degrees.");
}
}
}
slf4j 的具体实现
slf4j-log4j12-1.8.0-alpha2.jar (常用)
绑定log4j版本1.2,广泛使用的日志框架。您还需要在您的类路径上放置log4j.jar。
需要的jar包和配置文件
1. slf4j-api-1.5.11.jar
2. slf4j-log4j12-1.5.11.jar
3. log4j-1.2.15.jar
4. log4j.properties(也可以是 log4j.xml,本例中用 log4j.propertes)
注意若log4j.properties不在classpath目录下,则需要手动加载配置
1.log4j.properties的加载方式:PropertyConfigurator.configure( "log4j.properties路径" );
2.log4j.xml的加载方式:DOMConfigurator.configure( "log4j.xml路径" );
3.另外的加载方式:BasicConfigurator.configure(); 该方式若没有log4j.xml则加载log4j.propertes文件
log4j.properties配置如下:
#log4j.rootLogger=DEBUG,CONSOLE
log4j.logger.console=DEBUG,CONSOLE
log4j.logger.system=DEBUG,SYSLOG
log4j.logger.monitor=DEBUG,MONITORLOG
log4j.logger.zkchat=DEBUG,ZKCHATLOG
#console log
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#system log
log4j.appender.SYSLOG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.SYSLOG.File=dataroot//log4j//system.log
log4j.appender.SYSLOG.DatePattern=.yyyy-MM-dd
log4j.appender.SYSLOG.Threshold=INFO
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#monitor log
log4j.appender.MONITORLOG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MONITORLOG.File=dataroot//monitor//log4j//monitor.log
log4j.appender.MONITORLOG.Threshold=INFO
log4j.appender.MONITORLOG.DatePattern=.yyyy-MM-dd
log4j.appender.MONITORLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.MONITORLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#zkchat log
log4j.appender.ZKCHATLOG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ZKCHATLOG.File=dataroot//zkchat//log4j//zkchat.log
log4j.appender.ZKCHATLOG.Threshold=INFO
log4j.appender.ZKCHATLOG.DatePattern=.yyyy-MM-dd
log4j.appender.ZKCHATLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.ZKCHATLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
本示例配置了两类自定义log
1.console的控制台日志
2.文本日志,文本日志分两类:系统日志和模块日志,分别输出到不同的文件。
java代码获取方法为统一的slf4j接口:
private static Logger m_monitorLogger = LoggerFactory.getLogger("monitor");
private static Logger m_zkchatLogger = LoggerFactory.getLogger("zkchat");
private static Logger m_sysLogger = LoggerFactory.getLogger("system");
private static Logger m_consoleLogger = LoggerFactory.getLogger("console");
SLF4J-jdk14-1.8.0-alpha2.jar
绑定java.util.logging,也称为JDK 1.4日志记录
SLF4J-NOP-1.8.0-alpha2.jar
绑定NOP,静默地丢弃所有日志记录。
slf4j-simple-1.8.0-alpha2.jar
绑定简单 实现,将所有事件输出到System.err。只打印级别INFO和更高的消息。这种绑定在小应用程序的上下文中可能是有用的。
SLF4J-JCL-1.8.0-alpha2.jar
约束Jakarta Commons Logging。此绑定将所有SLF4J日志记录委托给JCL。