slf4j 的全称是 Simple Loging Facade For Java,即它仅仅是一个为 Java 程序提供日志输出的统一接口,并非一个具体的日志实现方案,就好比 JDBC 同样,只是一种规则而已。因此单独的 slf4j 是不能工做的,必须搭配其余具体的日志实现方案,好比 apache 的 org.apache.log4j.Logger,JDK 自带的 java.util.logging.Logger 以及 log4j 等。java
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency>
主要增长了 org.slf4j:slf4j-log4j12
依赖spring
在 src/main/resources 目录下建立名为 log4j.properties 的属性配置文件apache
log4j.rootLogger=INFO, console, file log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=logs/log.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.A3.MaxFileSize=1024KB log4j.appender.A3.MaxBackupIndex=10 log4j.appender.file.layout.ConversionPattern=%d %p [%c] - %m%n
日志配置相关说明:app
log4j.rootLogger
:根日志,配置了日志级别为 INFO,预约义了名称为 console、file 两种附加器log4j.appender.console
:console 附加器,日志输出位置在控制台log4j.appender.console.layout
:console 附加器,采用匹配器布局模式log4j.appender.console.layout.ConversionPattern
:console 附加器,日志输出格式为:日期 日志级别 [类名] - 消息换行符log4j.appender.file
:file 附加器,天天产生一个日志文件log4j.appender.file.File
:file 附加器,日志文件输出位置 logs/log.loglog4j.appender.file.layout
:file 附加器,采用匹配器布局模式log4j.appender.A3.MaxFileSize
:日志文件最大值log4j.appender.A3.MaxBackupIndex
:最多纪录文件数log4j.appender.file.layout.ConversionPattern
:file 附加器,日志输出格式为:日期 日志级别 [类名] - 消息换行符建立一个测试类,并测试日志输出效果,代码以下:布局
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyTest { public static final Logger logger = LoggerFactory.getLogger(MyTest.class); public static void main(String[] args) { logger.info("slf4j for info"); logger.debug("slf4j for debug"); logger.error("slf4j for error"); logger.warn("slf4j for warn"); String message = "Hello SLF4J"; logger.info("slf4j message is : {}", message);//{}占位符 } }
此时控制台显示为:测试
2018-06-07 05:15:42,914 INFO [com.hjj.hello.spring.MyTest] - slf4j for info 2018-06-07 05:15:42,915 ERROR [com.hjj.hello.spring.MyTest] - slf4j for error 2018-06-07 05:15:42,915 WARN [com.hjj.hello.spring.MyTest] - slf4j for warn 2018-06-07 05:15:42,916 INFO [com.hjj.hello.spring.MyTest] - slf4j message is : Hello SLF4J
项目根目录下也会多出 logs/log.log 目录及文件debug
附:占位符({})说明日志
打日志的时候使用了 {}
占位符,这样就不会有字符串拼接操做,减小了无用 String
对象的数量,节省了内存。而且,记住,在生产最终日志信息的字符串以前,这个方法会检查一个特定的日志级别是否是打开了,这不只下降了内存消耗并且预先下降了 CPU 去处理字符串链接命令的时间。code