logback日志应用实践

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值