目前项目开发中,常用的日志框架组合就是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)
<?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>