SLF4J+LogBack实现不同级别的日志输出到不同文件
前言
在项目开发中往往需要将不同的级别,不同包,不同接口的日志输出到不同的文件中,在利用SLF4J+LogBack实现此功能在配置文件中根据不同的级别,包,接口配置不同的appender日志记录器。
1.LogBack配置文件
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <!-- 日志编码 --> <property name="CHARSET" value="utf-8"></property> <!-- 日志记录格式 --> <property name="ERROR_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L-%msg%n" /> <property name="INFO_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L-%msg%n" /> <!-- 日志记录器,日期滚动记录 --> <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>log/log_error.log</file> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>log/error/log-error-%d{yyyy-MM-dd}.%i.log </fileNamePattern> <maxFileSize>6MB</maxFileSize> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 追加方式记录日志 --> <append>true</append> <!-- 日志文件的格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${ERROR_PATTERN}</pattern> <charset>${CHARSET}</charset> </encoder> <!-- 此日志文件只记录info级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 日志记录器,日期滚动记录 --> <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>log/log_info.log</file> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>log/info/log-info-%d{yyyy-MM-dd}.%i.log </fileNamePattern> <maxFileSize>6MB</maxFileSize> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 追加方式记录日志 --> <append>true</append> <!-- 日志文件的格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${ERROR_PATTERN}</pattern> <charset>${CHARSET}</charset> </encoder> <!-- 此日志文件只记录info级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <root level="INFO"> <appender-ref ref="FILEERROR" /> <appender-ref ref="FILEINFO" /> </root> </configuration>
对LogBack各个节点的详细介绍可以看Albin的文章>>
2.日志测试类
public class LogService { private Logger logger = LoggerFactory.getLogger(this.getClass()); public void logMethod() { try { logger.info("Method start"); throw new Exception("Method get out a error"); }catch(Exception e) { logger.error(e.getMessage()); } } }
Junit测试类
@RunWith(SpringRunner.class) @SpringBootTest public class LogServiceTest { @Test public void logtest() { LogService test = new LogService(); test.logMethod(); } }
3.日志输出结果
log_info.log
2019-08-01 16:22:54.580 INFO com.example.demo.logservice.LogService Line:12 -Method start
log_error.log
2019-08-01 16:22:54.581 ERROR com.example.demo.logservice.LogService Line:15 -Method get out a error