简介
本文介绍Spring的logback日志的xml配置文件的写法。
SpringBoot默认配置
SpringBoot的logback的默认配置效果就很好,可以打印彩色,其配置位置见:spring-boot-2.3.12.RELEASE.jar\org\springframework\boot\logging\logback\defaults.xml
源码:(控制台颜色配置见:<property name=”CONSOLE_LOG_PATTERN”)
<?xml version="1.0" encoding="UTF-8"?> <!-- Default logback configuration provided for import --> <included> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/> <logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/> <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/> <logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/> <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/> <logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/> <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/> <logger name="org.springframework.boot.actuate.endpoint.jmx" level="WARN"/> </included>
我把它单独拿出来:
${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}
logback-spring.xml(示例)
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>--> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!--<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>--> <!--<include resource="org/springframework/boot/logging/logback/file-appender.xml" />--> <springProperty scope="context" name="appName" source="spring.application.name"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </encoder> </appender> <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${appName}.log</file> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern> ${LOG_PATH}/%d{yyyy-MM-dd}.%i.log </fileNamePattern> <maxFileSize>20MB</maxFileSize> </rollingPolicy> </appender> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="logFile"/> </root> </configuration>
ELK
如果项目中的日志采用的是基于ELK(Elasticsearch,Logstash,Kibana三个开源软件的缩写)来进行日志管理。则可以在pom文件中引入logstash-logback-encoder依赖。
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.1</version> </dependency>
然后在logback-spring.xml中配置对应的appender:
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>debug</level> </filter> <destination>192.168.0.11:5061</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"> <customFields>{"project": "springboot-logback-elk"}</customFields> </encoder> </appender>
该appender的使用与其他appender的使用无异。主要使用了LogstashTcpSocketAppender类来完成与Logstash的通信。其中destination为Logstash提供的服务地址。customFields为自定义的参数,便于Logstash识别日志是从哪个业务系统传输过来的。
输出logback状态
有时为了了解logback配置文件加载情况,配置中对应的appender、logger的装载情况等,我们需要启用logback状态数据的输出。这也是logback官网强烈推荐的,可以帮助我们排除诊断一些问题。
方案1:添加元素(statusListener)
logback-spring.xml:
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
方案2:启用调试(不推荐)
application.yml
debug=true
多环境
SpringBoot项目,针对不同环境(profile)有不同的日志输出,比如:开发(dev)环境只输出CONSOLE的,生产环境(prod)只输出info和error,那则可用到Spring支持的profile机制。对应的元素为springProfile。
profile的值与springboot中配置文件的spring.profiles.active值对应。
<!-- 开发环境 --> <springProfile name="dev"> <logger name="com" level="debug" /> <root level="info"> <appender-ref ref="CONSOLE" /> </root> </springProfile> <!-- 测试环境+生产环境 --> <springProfile name="test,prod"> <logger name="com" level="info" /> <root level="info"> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </springProfile>
多彩输出
application.yml配置
如果你的终端支持ANSI,设置彩色输出会让日志更具可读性。通过在application.properties中设置spring.output.ansi.enabled参数来支持,默认为:detect。
never:禁用ANSI-colored输出
detect:会检查终端是否支持ANSI,是的话就采用彩色输出(推荐项)
always:总是使用ANSI-colored格式输出,若终端不支持的时候,会有很多干扰信息,不推荐使用
级别 | 颜色 |
---|---|
FATAL | 红色 |
ERROR | 红色 |
WARN | 黄色 |
INFO | 绿色 |
DEBUG | 绿色 |
TRACE | 绿色 |
手动指定颜色
可以指定将其作为转换选项的颜色或样式。例如,使文本展示为黄色:
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
支持以下颜色和样式:
1. blue
2. cyan
3. faint
4. green
5. magenta
6. red
7. yellow
请先
!