简单的Java日志模式(SLF4J)为各种日志框架,比如java.util、日志记录、logback和log4j作为一个简单的外观或抽象。SLF4J允许用户在部署时插入所需的日志框架。注意,SLF4J-enabling意味着你的 library/application 只有一个强制性的依赖性,即slf4j-api-1.7.12.jar。
SINCE 1.6.0 如果没有找到绑定类路径,然后SLF4J将默认为无操作的实现。
SINCE 1.7.0 Logger提供了使用Object[]打印方法,这种变化意味着SLF4J需要JDK 1.5或更高版本。在底层Java编译器将可变长度参数在方法中部分转换为Object[]。
SINCE 1.7.5 对日志检索进行了改善。
SINCE 1.7.9 通过将系统属性slf4j.detectLoggerNameMismatch设置为true,可以实现SLF4J自动检索错误命名。
一个简单的示例
编程的传统,下面是一个用SLF4J输出”HelloWorld”的例子。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info(“Hello World”);
}
}
运行这个例子,你首先要下载(http://www.slf4j.org/download.html)jar包并将其放到你的类路径中。编译和运行HelloWorld将导致以下输出被打印在控制台上。
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
这个警告是因为没有在类路径中发现slf4j绑定。若要消除警告,需要将以下的绑定添加到类路径:
slf4j-api-1.7.12.jar
slf4j-simple-1.7.12.jar
编译和运行HelloWorld现在将产生以下输出:
0 [main] INFO HelloWorld - Hello World
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.");
}
}
}
Typical usage pattern
SLF4J不依赖于任何特殊的类装载机制。实际上,使用唯一的日志框架时SLF4J的绑定在编译时是固定的。例如,slf4j-log4j12-1.7.12.jar在使用log4j时编译。在代码中,除了slf4j-api-1.7.12.jar外,只能选择一个适当的模式来绑定到类路径。不要在类路径中添加多余的模式,下图是常用模式所需要jar包的展示。
SLF4J接口和各种适配器是极其简单的。而且SLF4J的加载和类加载器没有关系,因此也没有因此导致的一些问题。
http://www.slf4j.org/manual.html
http://www.1024china.com/?p=208