Bootstrap

logback 初探学习

logback 三大模块

记录器(Logger)、追加器(Appender)和布局(Layout)

配置文件外层最基本的标签如图示

xml中定义的就是这个三个东西下面进入学习

包引入参考springboot 官方文档 Logging :: Spring Boot
我用的是springboot项目进行学习的,所以仅仅导入spring-boot-starter-web一个依赖就行,它默认使用的就是slf4j作为日志接口门面,使用logback作为默认接口实现,如图示

1.日志等级划分

1.基础输出

具体详情请参考官方文档:Chapter 2: Architecture

log等级划分为 trace < debug < info < warn < error
假设log定义为info时候,打印日志如果小于info,那么日志不会进行输出,样例如下:

    //由于配置定义的是 info 集别  根据 集别优先级 所以不会打印 trace和debug
    //trace < debug <info <warn < error
    ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("simple.consoleAppender");

    @GetMapping("/simpleConsoleAppender")
    public String index() {

        logger.trace("simple.consoleAppender [ trace ] hello world ");
        logger.debug("simple.consoleAppender [ debug ] hello world ");
        logger.info("simple.consoleAppender [ info ] hello world ");
        logger.warn("simple.consoleAppender [ warn ] hello world ");
        logger.error("simple.consoleAppender [ error ] hello world ");//
        return "index";
    }

2.父子关系演示

关于日志还有父子关系的结构,可以认为就是java类父子关系,假设定义日志名称为com.group.order.service,那么logback 就会创建关系为:root->com->group->order->service
的5种日志name。如果你用的是com.group 输出的日志,那么就会向上依次查找,如果都没有定义,那么使用默认root级别level,默认为debug级别,下面是演示


    //由于配置定义的是 info 集别  根据 集别优先级 所以不会打印 trace和debug
    //trace < debug <info <warn < error
    ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("simple.consoleAppender");
    ch.qos.logback.classic.Logger loggerSimple = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("simple");
    ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);

    @GetMapping("/simpleConsoleAppender")
    public String index() {
//定义的info级别
        logger.trace("simple.consoleAppender [ trace ] hello world ");
        logger.debug("simple.consoleAppender [ debug ] hello world ");
        logger.info("simple.consoleAppender [ info ] hello world ");
        logger.warn("simple.consoleAppender [ warn ] hello world ");
        logger.error("simple.consoleAppender [ error ] hello world ");//
//未定义的simple日志 会自动向上查询level级别
        loggerSimple.trace("loggerSimple.consoleAppender [ trace ] hello world ");
        loggerSimple.debug("loggerSimple.consoleAppender [ debug ] hello world ");
        loggerSimple.info("loggerSimple.consoleAppender [ info ] hello world ");
        loggerSimple.warn("loggerSimple.consoleAppender [ warn ] hello world ");
        loggerSimple.error("loggerSimple.consoleAppender [ error ] hello world ");//
//打印root 的默认集别
        System.out.println("root level = " + rootLogger.getEffectiveLevel());//
        return "index";
    }

以上demo的xml配置如下  spring-logback.xml

<!--<configuration debug="true">-->
<configuration >

   <logger name="simple.consoleAppender" level="INFO" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>

 

</configuration>

 2.log xml 定义

1.最简单的输出定义

参考上面xml定义。记录器(Logger)、追加器(Appender)
就是上面的logger标签和appender标签,
logger主要就是两个属性,日志名称name和日志级别level

2.Appender分析

顶级接口Appender两个实现类

这里主要分析,UnsynchronizedAppenderBase,因为后续主要围绕这几个实现类来做日志配置

主要使用的就是下面这些

ConsoleAppender 控制台打印日志输出:Chapter 4: Appenders
WARNING Please note the console is comparatively slow, even very slow. You should avoid logging to the console in production, especially in high volume systems.
警告:请注意,控制台相对较慢,甚至非常慢。在生产环境中,尤其是在高流量系统中,应避免向控制台输出日志。

FileAppender 文件日志输出:第 4 章:附加程序

RollingFileAppender 可备份滚动日志文件 第 4 章:附加程序

个人学习视频记录 结合官方文档自学logback_哔哩哔哩_bilibili

;