一、现有日志框架及选用
现有日志框架有:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j等。
日志抽象层 | 日志实现 |
JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for java)、Jboss-logging | Log4j、JUL(java.util.logging)、Log4j2、Logback |
SpringBoot:底层Spring框架,默认使用JCL。
Spring boot 选用slf4j 和logback。
我们选用Slf4j和Logback框架。
下图显示slf4j与各不同日志实现框架直接的关系,在选用不同的日志框架时配置文件使用具体实现框架的配置文件。
二、日志框架统一
slf4j网址:http://www.slf4j.org/legacy.html
如何让系统中所有的日志都统一到slf4j
下图展示slf4j针对不同实现的框架兼容其他日志框架的替换实现方案。
1.将系统中其他日志框架先排除出去;
2.用中间包替换原有的日志框架;
3.用导入slf4j其他的实现。
三、SpringBoot的日志
1. SpringBoot底层使用slf4j+logback的方式进行日志记录。
2.SpringBoot也把其他的日志都替换成了slf4j。
3.如同引入了其他的日志框架一定要把这个框架的默认日志依赖除掉。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.8.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
四、logback.xml例子
logback.xml:直接被日志框架识别。
logback-spring.xml:由Springboot调用进行日志配置的识别,能使用springProfile 标签。
##spring.profiles.active=dev
##spring.profiles.active=!dev
<springProfile name="staging>
##配置在某个环境下生效。
</springProfile>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_HOME" value="./log" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>114.67.83.201:9250</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp/>
<version/>
<message/>
<loggerName/>
<threadName/>
<logLevel/>
<callerData/>
</providers>
</encoder>
</appender>
<appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>114.67.83.201:9250</destination>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<jsonFactoryDecorator class="net.logstash.logback.decorate.CharacterEscapesJsonFactoryDecorator">
<escape>
<targetCharacterCode>10</targetCharacterCode>
<escapeSequence>\u2028</escapeSequence>
</escape>
</jsonFactoryDecorator>
<providers>
<pattern>
<pattern>
{
"timestamp":"%date{ISO8601}",
"appname":"test",
"message":"[%d{yyyy-MM-dd HH:mm:ss.SSS}][%p][%t][%l{80}|%L]%m"}%n
}
</pattern>
</pattern>
</providers>
</encoder>
<keepAliveDuration>5 minutes</keepAliveDuration>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/day.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>15</maxHistory>
<maxFileSize>100MB</maxFileSize>
<totalSizeCap>50GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="STASH" />
</root>
<logger name="org.hibernate" level="WARN"/>
</configuration>
本文档为查看驰狼课堂的《Spring Boot视频教程(上)核心技术篇》所做的学习笔记,课堂地址: