Springboot整合logback配置彩色日志
【代码】Springboot整合logback配置彩色日志。
·
输出格式中符号含义
%-: "-"号指信息输出时左对齐
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss.SSS},输出类似:2024-11-19 14:06:50.029
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%method: 输出代码中的方法名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行
%wEx: 用来输出异常栈跟踪信息,这个规则将会将其转换为字符串,并将其中的换行符替换为空格
为保持日志的整洁可在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1)%20class:指定输出class,最小的宽度是20,如果class的名称小于20的话,默认的情况下右对齐
2)%-20class:指定输出class,最小的宽度是20,如果class的名称小于20的话,"-"号指定左对齐
3)%.30class:指定输出class,最大的宽度是30,如果class的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格
4)%20.30class:如果class小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉
彩色日志输出格式:
%highlight:颜色,info为蓝色,warn为浅红,error为加粗红,debug为黑色
%boldMagenta: 粗红
%magenta: 洋红
$cyan: 青色
%white: 白色
案例
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- SpringBoot的logback的默认配置,可以打印彩色 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<!-- 获取yml配置文件中的应用名称作为属性 -->
<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
<!-- 日志文件名称前缀,spring-boot-admin监控时要与yml配置的Actuator监控日志一致 -->
<property name="log.file.prefix" value="${spring.application.name}"/>
<!-- 日志文件路径 -->
<property name="log.path" value="./logs"/>
<!-- 日志最大的历史保留天数 -->
<property name="maxHistory" value="30"/>
<!-- 日志最大文件大小 -->
<property name="maxFileSize" value="100MB"/>
<!-- 字符集 -->
<property name="charset" value="UTF-8"/>
<!-- 文件输出格式,参考: https://blog.csdn.net/df1067/article/details/143884321 -->
<property name="console.log.pattern" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr([%15.15thread]){faint} %clr(%39.39class{39}:%16.16method:%3line){cyan}: %m%n%wEx" />
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} [%15.15thread] %39.39class{39}:%16.16method:%3line: %m%n%wEx" />
<!-- console控制台输出日志 -->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--日志输出格式:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%logger{50}:表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息,%n是换行符-->
<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread][%class{0}.%method\(\):%line] %-5level[%logger{50}]- %msg%n</pattern>-->
<pattern>${console.log.pattern}</pattern>
<charset>${charset}</charset>
</encoder>
</appender>
<!-- info输出日志 -->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/${log.file.prefix}-info.log</file>
<!--滚动策略,SizeAndTimeBasedRollingPolicy必须加上maxFileSize属性-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志默认压缩路径,将超过指定文件大小的日志,进行存档,%d{yyyy-MM,aux}这个aux表示该%d是辅助配置,不需要按照此滚动打包,这样logback就可以按照后面的%d{yyyy-MM-dd}每日滚动打包 -->
<fileNamePattern>${log.path}/%d{yyyy-MM,aux}/${log.file.prefix}-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
<maxFileSize>${maxFileSize}</maxFileSize>
<!--启动时清除历史日志-->
<!--<cleanHistoryOnStart>true</cleanHistoryOnStart>-->
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${charset}</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 过滤的级别,生产环境只过滤info,防止日志太多 -->
<springProfile name="prod">
<level>info</level>
</springProfile>
<springProfile name="!prod">
<level>debug</level>
</springProfile>
</filter>
</appender>
<!-- error输出日志 -->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/${log.file.prefix}-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM,aux}/${log.file.prefix}-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
<maxFileSize>${maxFileSize}</maxFileSize>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${charset}</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- <!– 匹配时的操作:接收(记录) –>-->
<!-- <onMatch>ACCEPT</onMatch>-->
<!-- <!– 不匹配时的操作:拒绝(不记录) –>-->
<!-- <onMismatch>DENY</onMismatch>-->
</filter>
</appender>
<!-- info异步输出 -->
<appender name="async_info" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="fileInfoLog"/>
</appender>
<!-- error异步输出 -->
<appender name="async_error" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="fileErrorLog"/>
</appender>
<appender name="skyWalkingLog" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${charset}</charset>
</encoder>
</appender>
<!-- 配置Druid监控日志输出到单独的文件 -->
<appender name="druid" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/${log.file.prefix}-druid-monitor.log</file>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${log.path}/${log.file.prefix}-druid-monitor.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${charset}</charset>
</encoder>
</appender>
<!--druid相关logger,additivity="false" 设置打印信息行为不向上级传递-->
<logger name="com.alibaba.druid.filter.stat.StatFilter" level="warn" additivity="false">
<appender-ref ref="druid"/>
</logger>
<!--其它日志记录级别-->
<!--logger用来配置绑定某个包或者类下的日志输出等级,以及使用哪一个appender来输出日志,additivity配置是否向上级logger传递打印信息行为,该logger的上级为root,默认true-->
<logger name="com.xx" level="info"/>
<logger name="com.xx.mapper" level="debug"/>
<logger name="org.redisson" level="error"/>
<logger name="org.apache" level="error"/>
<logger name="io.netty" level="error"/>
<logger name="io.lettuce" level="error"/>
<logger name="com.alibaba" level="error"/>
<logger name="org.springframework" level="error"/>
<logger name="org.mybatis" level="error"/>
<logger name="org.apache.ibatis" level="error"/>
<logger name="com.baomidou" level="error"/>
<logger name="reactor.util.Loggers" level="error"/>
<logger name="org.hibernate.validator" level="error"/>
<logger name="springfox" level="error"/>
<root level="INFO">
<appender-ref ref="consoleLog"/>
<appender-ref ref="async_error"/>
<appender-ref ref="async_info"/>
<appender-ref ref="skyWalkingLog"/>
</root>
</configuration>
如果要在linux上运行有彩色,还需要在application.yml加上配置
spring:
output:
ansi:
enabled: always # 总是开启ansi颜色,用来打印彩色日志
更多推荐
所有评论(0)