• LogBack


    LogBack

    首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样的呢?SLF4J,即简单日志门面(Simple Logging Facade for JAVA),不是具体的日志解决方案,它只服务于各种各样的日志系统。一般来说,slf4j配合log4j、logback进行使用,可以理解为slf4j是标准,log4j和logback是实现.

    这次讲下logback-spring.xml的配置

    Appender

    • Logback将执行日志事件输出的组件称为Appender
    • 实现的Appender必须继承 ch.qos.logback.core.Appender接口,这个接口有一个doAppender方法
    • Appender最终都会负责输出日志,但是他们也可能将日志格式化的工作交给Layout,或者Encoder对象。
    • logback-spring.xml中有许多的appender,这里我们挑几个项目中用的讲下

    ConsoleAppender

    • 顾名思义这个是打印到控制台的appender

    AsyncAppender

    • AsyncAppender记录ILoggingEvents的方式是异步的。它仅仅相当于一个event分配器,因此需要配合其他appender才能有所作为。


    RollingFileAppender

    • RollingFileAppender继承自FileAppender,提供日志目标文件自动切换的功能。例如可以用日期作为日志分割的条件。
    • RollingFileAppender有两个重要属性,RollingPolicy负责怎么切换日志,TriggeringPolicy负责何时切换.
    • 为了使RollingFileAppender起作用,这两个属性必须设置,但是如果RollingPolicy的实现类同样实现了TriggeringPolicy接口,则也可以只设置RollingPolicy这个属性。


    RollingPolicy

    • 负责日志文件的切换以及重命名
    • TimeBasedRollingPolicy:日志滚动策略基于时间的,例如根据天数,月份


    SentryAppender

      • 通过Raven上报的sentry
    @Override
    protected void append(ILoggingEvent iLoggingEvent) {
    // Do not log the event if the current thread is managed by raven
    if (RavenEnvironment.isManagingThread())
    return;

    RavenEnvironment.startManagingThread();
    try {
    if (raven == null)
    initRaven();

    if (minLevel != null && !iLoggingEvent.getLevel().isGreaterOrEqual(minLevel))
    return;

    Event event = buildEvent(iLoggingEvent);
    raven.sendEvent(event);
    } catch (Exception e) {
    addError("An exception occurred while creating a new event in Raven", e);
    } finally {
    RavenEnvironment.stopManagingThread();
    }
    }

    AmqpAppender

    • 将日志发送到mq中,再由消费者推送到Logstash

    启用Appender
    appender-ref 表示启用哪些appender

     <!-- root级别 DEBUG -->
    <root level="DEBUG">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ASYNC_DEFAULT" />
    <if condition='property("sentryEnable").contains("true")'>
    <then>
    <appender-ref ref="Sentry" />
    </then>
    </if>
    <if condition='property("elkEnable").contains("true")'>
    <then>
    <appender-ref ref="ELK" />
    </then>
    </if>
    </root>

    LayoutBase
    Layout是logback中负责把日志事件转换成成字符串的组件,可以理解为日志中需要哪些字段,可以通过layout来做.
    可以自定义自己的layout


    doLayout
    主要负责组装需要上报的信息,比如一些自定义的requestId,reqKey 等

    • 继承LayoutBase<ILoggingEvent>
    • 重写doLayout方法


    这里配置自定义的layout之后,项目中每个log.info等方法都会经过这个方法组装上报信息

  • 相关阅读:
    团队选题报告
    第二次结对作业
    高级软件工程团队第一次作业
    第一次结队作业
    高级软件工程第二次作业
    高级软件工程第一次作业
    洛谷 题解 2165 [AHOI2009]飞行棋
    洛谷 题解 P1684 考验
    洛谷 题解 P4613 【[COCI2017-2018#5] Olivander】
    洛谷 题解 P5534 【【XR-3】等差数列】
  • 原文地址:https://www.cnblogs.com/xwx20160804/p/11719456.html
Copyright © 2020-2023  润新知