1. 日志应用目标
- 不同环境实现不同级别日志输出
- dev输出INFO以上
- prod输出ERROR以上
- 不同包实现不同级别日志输出
- 业务程序包输出info以上级别日志到logStash;ERROR级别的分到es下不同的index
- 所有包输出ERROR级别日志到logStash和file
- 日志能输出到不同的界质
- logStash(elasticSearch)
- file
- stdout
- 在日志输出中增加调用链信息(traceId、spanId、服务名、ip信息)
- 通过tlog 增加日志输出
2.日志配置说明
2.1 logback配置
2.1.1 实现了向logStash、file、stdout输出不同的日志
-
logStash
- ${app_name}-info: 记录example.log 包下的IINFO级别以上日志
<logger name="example.log" level="info"> <appender-ref ref="logStash-info" /> </logger>
- ${app_name}-error: 记录所有ERROR日志
-
file
- ${log_home}/ ${app_name}-%d{yyyy-MM-dd}.log: 记录所有ERROR日志
<!-- 过滤器,只记录 error 级别的日志 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>error</level> </filter>
-
stdout
根据springProfile的active,在控制台输出不同的日志
- dev : 输出所有INFO级别以上日志
- prod : 输出所有ERROR级别以上日志
<springProfile name="prod"> <root level="error"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> <appender-ref ref="logStash-error" /> </root> </springProfile>
2.1.2 应用名命名日志文件名
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="app_name"/>
2.1.3 logback.xml示例
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 -->
<property name="LOG_HOME" value="../logs/" />
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="app_name"/>
<property name="COLOR_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} %green([%thread]) %highlight(%-5level) %boldMagenta(%replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %msg%xEx%n" />
<!-- <property name="COLOR_PATTERN" value="%gray(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %-5level %highlight(%logger{50}):%boldMagenta(%L) - %msg%n" />-->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>${COLOR_PATTERN}</pattern>
</encoder>
</appender>
<!-- 输出到 logStash 配置 app_name-info -->
<appender name="logStash-info" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.6.136:5044</destination>
<!-- encoder必须配置,有多种可选 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"appname":"${APP_NAME}-info"}</customFields>
</encoder>
<connectionStrategy>
<roundRobin>
<connectionTTL>5 minutes</connectionTTL>
</roundRobin>
</connectionStrategy>
</appender>
<!-- error 级别的logStash 索引名为app_name-error -->
<appender name="logStash-error" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 过滤器,只记录 error 级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<destination>192.168.6.136:5044</destination>
<!-- encoder必须配置,有多种可选 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"appname":"${APP_NAME}-error"}</customFields>
</encoder>
<connectionStrategy>
<roundRobin>
<connectionTTL>5 minutes</connectionTTL>
</roundRobin>
</connectionStrategy>
</appender>
<!-- error 级别的保存到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录 error 级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
</appender>
<logger name="example.log" level="info">
<appender-ref ref="logStash-info" />
</logger>
<!-- 日志输出级别 -->
<springProfile name="dev">
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="logStash-error" />
</root>
</springProfile>
<springProfile name="prod">
<root level="error">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="logStash-error" />
</root>
</springProfile>
</configuration>
2.2 集成了tlog对日志输出的增强
- application.yml文件配置
#tlog配置
tlog:
pattern: .[$preApp][$preIp][$spanId][$traceId]