我们将从四个问题出发。
第一,log4j是什么?
log4j是一个日志系统,是Apache的一个开放源代码项目。当然Java日志系统比较丰富,其他常用的日志系统还有java.util.logging、JUL、logback等等。
第二,slf4j又是什么?
slf4j(Simple logging facade for Java),即简单日志门面。它不同于上面所说的各种日志系统,不是真正的日志实现,不是具体的日志解决方案。而是一个抽象层,它允许你在后台使用任意一个日志系统(例如log4j)。即slf4j是一个具体日志系统的封装,对外提供统一的API,但其本身并不提供日志实现。
第三,既然已经有各种日志系统了,为什么还要使用slf4j?
问题就是现在有了各种日志系统,因此每个类库使用的日志系统都可能不一样。但lf4j允许你在后台使用任意一个日志系统(例如log4j),即使得你的程序独立于任意特定的日志系统。例如,你的一个项目已经使用了log4j,而你加载了一个类库,比方说 Apache Active MQ——它依赖于另外一个日志类库logback,那么你就需要把它也加载进去。但如果Apache Active MQ使用了slf4j,你就可以继续使用你的日志系统而无需加载和维护一个新的日志框架。
第四,果真如此好用,那怎么使用?
首先,准备相应的包。
1.slf4j-api-x.x.x.jar 它提供对外一致的API接口,其本身不提供日志实现。
2.这里选择log4j作为我们的日志实现,则需要下载 log4j-x.x.x.jar。
3.如果想把slf4j绑定log4j,则需要下载slf4j对log4j的相应”驱动” slf4j-log4j12-x.x.x.jar。
这样就可以使用slf4j提供的API,用log4j实现打印日志了。具体在Maven porn.xml 文件中添加的dependency如下:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.6</version> </dependency>
然后,添加配置文件。log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties格式的文件。我们这里采用properties格式的方法。
在项目中添加log4j.properties文件,如下图:
具体配置如下:
# config root logger # [level] 是日志输出级别 log4j.rootLogger = INFO,system.out # Appender 为日志输出目的地 log4j.appender.system.out=org.apache.log4j.ConsoleAppender log4j.appender.system.out.layout=org.apache.log4j.PatternLayout log4j.appender.system.out.layout.ConversionPattern=Server Logger --> %5p{%F:%L} = %m%n # config this Project.file logger log4j.logger.thisProject.file=INFO,thisProject.file.out # 每天产生一个日志文件 log4j.appender.thisProject.file.out=org.apache.log4j.DailyRollingFileAppender log4j.appender.thisProject.file.out.File=logContentFile.log log4j.appender.thisProject.file.out.layout=org.apache.log4j.PatternLayout
最后,在代码中使用日志系统。示例代码如下:
import org.apache.log4j.PropertyConfigurator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class App { // 通过指定的名字获得日志对象 public static final Logger log = LoggerFactory.getLogger(App.class); public static void main(String[] args) { // 通过资源类对log4j.properties文件进行加载 PropertyConfigurator.configure("D:\\Workspace\\man\\src\\log4j.properties"); log.info("Hello,World!"); } }
使用效果:
至此成功打印输出了日志。
通过此篇文章,我们简单了解slf4j和log4j的背景。在此基础通过一个简单的例子,实现了slf4j和log4j的配置使用。其中省略了很多细节,待下次深入研究后再另起一篇博文详细介绍吧。
来源:oschina
链接:https://my.oschina.net/u/2420309/blog/710836