spring boot 默认的日志框架为??logback ,在这里记录一下相关的配置,方便以后使用。
日志级别
ALL:是最低等级的,用于打开所有日志记录。
TRACE:用于展现程序执行的轨迹
DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的。
INFO:表明 消息在粗粒度级别上突出强调应用程序的运行过程。
WARN:表明会出现潜在错误的情形。
ERROR:指出虽然发生错误事件,但仍然不影响系统的继续运行。
FATAL:指出每个严重的错误事件将会导致应用程序的退出。
OFF:是最高等级的,用于关闭所有日志记录。
?一般的日志4种级别就足够了: DEBUG,INFO,WARN,ERROR
日志格式化
%d{yyyy-MM-dd HH:mm:ss.SSS}——日志输出时间 %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
%t 同?%thread %-5level——日志级别,并且使用5个字符靠左对齐
%line——输出日志所在的代码行数 %logger{36}——日志输出的类全包名,{36}最大显示长度 %msg——日志消息 %m?同?%msg %n——平台的换行符
${PID:-}?——进程号
logback 配置文件
logback默认读取的配置文件为:
logback-spring.xml,?logback-spring.groovy,?logback.xml,?logback.groovy
上面是默认的命名规则,并且放在src/main/resources下面即可。
如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,可以在application.properties配置文件里面通过logging.config属性指定自定义的名字:
logging.config=classpath:logging-config.xml
配置文件的默认结构:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<property name="log.path" value="/logs/xxxx" />
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>-->
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--输出到文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!-- logback为java中的包 -->
<logger name="com.xxx"/>
<!--logback.LogbackDemo:类的全路径 -->
<logger name="com.xxx.xxx.Test" level="WARN" additivity="false">
<appender-ref ref="console"/>
</logger>
</configuration>
contextName:设置上下文名称
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。
<contextName>logback</contextName>
property:设置变量
用来定义变量值的标签, 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
<property name="log.path" value="/logs/xxxx" />
………
<fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
appender:子节点一
ThresholdFilter 为系统定义的拦截器,level 是最低拦截的级别。低于此设置级别的日志不会输出。
例如我们用ThresholdFilter来过滤掉ERROR级别以下的日志不输出到文件中。如果不用记得注释掉,不然你控制台会发现没日志~
encoder 表示对日志进行编码
彩色日志输出
本地调试的时候,实时日志的高亮有助于快速排查问题,下面我们来说一下怎么配置彩色日志
<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{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%-5level){highlight} PID:%clr(${PID:- }){magenta} [%clr(%15.15t){blue}] %clr(%-40.40logger{39}){cyan} [%clr(%5.5line){blue}]: %msg%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
……
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
彩色日志的输出依赖于clr, 对于的 org.springframework.boot.logging.logback.ColorConverter
格式%clr(格式化日志数据){颜色值||样式}
%clr(%-5level){highlight}
?颜色值
可以查看 org.springframework.boot.logging.logback.ColorConverter源码
static {
Map<String, AnsiElement> ansiElements = new HashMap<>();
ansiElements.put("faint", AnsiStyle.FAINT);
ansiElements.put("red", AnsiColor.RED);
ansiElements.put("green", AnsiColor.GREEN);
ansiElements.put("yellow", AnsiColor.YELLOW);
ansiElements.put("blue", AnsiColor.BLUE);
ansiElements.put("magenta", AnsiColor.MAGENTA);
ansiElements.put("cyan", AnsiColor.CYAN);
ELEMENTS = Collections.unmodifiableMap(ansiElements);
}
常用的配置:因为容器化部署日志由运维收集,就取消了日志文件配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
<!-- 彩色日志依赖的渲染类 -->
<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{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%-5level){highlight} PID:%clr(${PID:-}){magenta} [%clr(%15.15t){blue}] %clr(%-40.40logger{39}){cyan} [%clr(%5line){blue}]: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>TRACE</level>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
<!-- 减少启动日志,在获取注册中心的配置前的部分日志 -->
<Logger name="org.hibernate.validator.internal.util.Version" level="ERROR"/>
<logger name="com.alibaba.nacos" level="ERROR"/>
<logger name="com.alibaba.cloud.nacos" level="ERROR"/>
<Logger name="org.reflections.Reflections" level="ERROR"/>
</configuration>
|