目前项目开发中,常用的日志框架组合就是commons Logging
和Log4j
,除了这一对之外,就是SLF4J
和Logback
的组合了(充分体现了java的庞大开源体系,为了实现同一个目的,可以有多种不同的替代解决方案
)。
SLF4J
和Logback
之间的关系和commons Logging
、Log4j
一样,前者作为一个日志的接口,后者作为日志的实现。
在使用上,这两队组合之间没有太大的区别,不过个人认为SLF4J
和Logback
在使用上更加的方便,举个栗子:
Commons Logging-----Log4J组合
做过开发的朋友肯定看到过下面的日志输入代码:
log.info("用户:"+user+"获取到的规则:"+rule)
上方代码中,最恶心的就是这个字符串的拼接了,如果换成SLF4J
和Logback
组合,则我们可以转换下写法:
SLF4J-----Logback组合
log.info("用户{}获取到的规格{}",user,rule)
同理,使用SLF4J
和Logback
,我们也需要在/classpath
目录下 创建一个日志的自定义配置文件,以便日志能够按照我们的预期来进行打印,方便我们了解项目的运行情况。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<file>log/output.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>log/output.log.%i</fileNamePattern>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>1MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>