zoukankan      html  css  js  c++  java
  • Logback日志使用详解

    概述

    Logback建立于三个主要类之上:日志记录器(Logger),输出端(Appender)和日志格式化器(Layout)。这三种组件协同工作,使开发者可以按照消息类型和级别来记录消息,还可以在程序运行期内控制消息的输出格式和输出目的地。

    1.日志记录器(Logger):控制要输出哪些日志记录语句,对日志信息进行级别限制。
    2.输出端(Appender):指定了日志将打印到控制台还是文件中。

    3.日志格式化器(Layout):控制日志信息的显示格式。

    日志记录器Logger

    在logback中只有一个日志记录器Logger,继承自org.slf4j.Logger且是final的。

    public final class Logger implements org.slf4j.Logger, LocationAwareLogger,

    AppenderAttachable<ILoggingEvent>, Serializable {

    }

    输出端Appender

    Logback提供了非常丰富的输出端Appender。

     

    其中,常用的Appender有以下几个:

    ConsoleAppender:打印日志信息到控制台,相当于System.out或者System.err。

    FileAppender:打印日志信息到文件中。

    RollingFileAppender:根据RollingPolicy和TriggeringPolicy将日志打到相应的文件中。

    RollingFileAppender有两个与之互动的重要子组件。第一个是RollingPolicy,负责滚动。第二个是TriggeringPolicy,决定是否以及何时进行滚动。所以,RollingPolicy负责“什么”, TriggeringPolicy负责“何时”。 要想RollingFileAppender起作用,必须同时设置RollingPolicy和TriggeringPolicy。不过,如果RollingPolicy也实现了TriggeringPolicy接口,那么只需要设置RollingPolicy。

    让我们来看看这些策略都有哪些吧?

     

    其中,TimeBasedRollingPolicy比较特殊,它同时继承了RollingPolicy和TriggerPolicy。即配置它一个也可以的。

    另外在Appender中还使用了一个组件Encoder。

    Encoder负责两件事,一是把事件转换为字节数组,二是把字节数组写入输出流。其结构如下:

     

    目前,PatternLayoutEncoder是唯一有用的encoder,它基本上是封装了PatternLayout,让PatternLayout负责大多数工作。因此,似乎encoder并没有带来多少好东西,反而只有不需要的复杂性。然而,我们希望当新的、强大的encoder到来时,这种印象会改变。

    日志格式化器Layout

    其结构如下所示:

     

    使用方法

    logback配置

    Logback可以通过编程式配置,或用XML格式的配置文件进行配置。

    Logback采取下面的步骤进行自我配置:

    1. 尝试在classpath下查找文件logback-test.xml;

    2. 如果文件不存在,则查找文件logback.xml;

    3. 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,这会导致记录输出到控制台。

    Logback嵌入代码使用

    引入需要的包:

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    生产logger实例:

    要打印的类的开始部分:

    private final Logger logger = LoggerFactory.getLogger(getClass());

    使用logger实例打印日志

    打印形式:

                if (logger.isDebugEnabled()) {

                    logger.debug("To modify role(name={}) to role(name={}).",

                            updated.getName(), role.getName());

                }

  • 相关阅读:
    java.sql.SQLException: The server time zone value is unrecognized or represents more than one time zone
    MySQL
    C# 简单软件有效期注册的实现【原】
    【转】Flask and PostgreSQL on Heroku
    5个提问,详细介绍北极星指标的策略框架 | 人人都是产品经理
    DingDing CRM
    Mariadb & MySQL :: MySQL 5.7 Reference Manual :: 8.2.1.17 LIMIT Query Optimization
    IT从之“CRM”与“OA”
    maven
    中国网络安全企业100强报告
  • 原文地址:https://www.cnblogs.com/davidwang456/p/4448011.html
Copyright © 2011-2022 走看看