SLF4J与Log4j的区别:
- SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
- Log4j是一个实际的日志解决方案,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。
由于slf4j是用户在部署时根据实际情况来选择日志输出方案(例如选择log4j还是选择JDK自带的日志系统),所以肯定会涉及到jar包的组合。如下图:
从图中可以了解到:
若使用slf4j+log4j,涉及的jar包如下:slf4j-api-1.7.5.jar、log4j-1.2.16.jar、slf4j-log4j12-1.7.10.jar
若使用slf4j+JDK自带的日志系统,涉及的jar包如下:slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar
Maven依赖如下:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.10</version> </dependency>
在工程中框架会获取具体使用的日志系统。若工程中存在slf4j,则会优先使用该jar包,然后通过slf4j选择具体的日志系统。但是需要注意的是当未加入中间jar包(slf4j-log4j12.jar或slf4j-jdk14-1.5.10.jar)时只会出现漏打日志的情况,这可能与slf4j选择了默认的某一个日志系统有关系。
特别像Log4j这种工程常用的日志系统,需要特别注意的是在工程中若只使用Log4j时工程不能包含slf4j的任何jar包,否则会出现不必要的日志无法打印的问题。
也可以理解为:要么加全jar包,不要遗漏中间jar包。要么使用单一的log4j。
日志打印布局与参数设置按照具体日志系统的格式进行设置,点击Log4j配置