logback可以设置打印日志为制定格式,
通常我们可以在logback.xml里面进行设置;
通用的设置为:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds" debug="false">
<property name="LOG_HOME" value="/data/logs/vvic-coupon-service" />
<property name="LOG_NAME" value="vvic-coupon-service" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %green(%-5level) %blue(%property{PID}) --- [%-20thread] %cyan(%-70logger{50}) : %msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
这样的话idea的控制台就会按照我们指定的格式输出了。
但是一般做日志收集,或者统计的时候这种格式的日志不好解析。
可以转为json格式输出;
(我们公司是为了方便测试使用,实话说,转为json,个人不喜,找问题非常之不好)
修改logback.xml文件:
<!-- 按照每天生成日志文件 -->
<appender name="DAYINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 注意这里要用 SizeAndTimeBasedRollingPolicy 这个策略,可以兼容日期和大小 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- daily rollover 保存历史记录到这个文件夹一日起为后缀 -->
<fileNamePattern>${LOG_HOME}/test_info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 每个log的最大值 -->
<maxFileSize>30MB</maxFileSize>
<!-- 保存多少天的日志 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{
"time": "%date{yyyy-MM-dd HH:mm:ss.SSS}",
"level": "%level",
"pid": "${PID:-}",
"thread": "%thread",
"requestId": "%X{requestUUID}",
"logger": "%logger{64}",
"method": "%method",
"line": "%line",
"message": "%message",
"statck_trace":"%exception{5}"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
这里引用了logstash的类:LoggingEventCompositeJsonEncoder
所以要导入logstash的包,
我们用的是grade做依赖包的,
添加完成依赖后,如果没有导入依赖,点击刷新试试(一开始我也纳闷,都加了依赖了,怎么还引用不到,后来依次clean,builder,刷新,就好了),
最后输出的格式:
{
"time": "2021-02-07 09:05:36.405",
"level": "INFO",
"pid": "138556",
"thread": "restartedMain",
"requestId": "",
"logger": "org.hibernate.Version",
"method": "logVersion",
"line": "46",
"message": "HHH000412: Hibernate Core {5.3.10.Final}", // 我们log.info里面的内容也会打印在这里
"statck_trace": ""
}
最后有个点注意下:
上面那种json输出是配置给输出的日志文件的,我们idea控制台依旧是之前默认的输出格式
<property name="CONSOLE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} [%thread] [%X{requestUUID}] [%logger{127}] %line %msg%n"/>
<property name="CONSOLE_LOG_PATTERN_COLOR"
value="%d{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | ${PID:-} | %boldYellow(%thread) | %X{requestUUID} | %boldBlue(%logger) | %boldBlue(%line) | %msg%n"/>
<!-- Console 输出设置 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN_COLOR}</pattern>
<charset>utf8</charset>
</encoder>
</appender>