logback基本配置说明

2023-11-11

1.简介

logback继承自log4j,它是spring boot默认的日志集成框架,官网地址:https://logback.qos.ch/。

2.spring boot默认日志框架

当我们启动spring boot项目的时候,没有进行任何日志的配置,控制台能输出日志,原因是spring boot内置了org.springframework.boot.logging.logback日志,里面配置了base.xml文件,引入了基础的日志输出格式。
在这里插入图片描述当我们项目部署到服务器后,会在与jar同级的目录下生成一个默认日志文件,文件名为jar包的名称。
在这里插入图片描述

3.自定义logback配置文件

默认的日志文件,生成的日志格式配置不是我们所希望的,默认日志输出格式:
在这里插入图片描述
此时我们可以自定义logback配置文件,默认的日志文件名为logback.xml,spring官方首推的默认日志文件名为logback-spring.xml;若是我们想命名为其他的名称,也是可以的,在properties或者yml配置文件中指明下日志路径和名称即可:

logging:
  config: classpath:logback-xxx.xml

日志文件统一放在目录:src/resources之下。

4.配置文件说明

先来看一个完整的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<!--自动扫描配置文件,间隔周期是60秒,不打印logback的内部日志信息-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!--根据spring激活的配置文件定义不同的属性-->
    <springProfile name="local">
        <!--local环境,日志的存放位置-->
        <property name="LOG_HOME" value="/Users/work/tools/logs/xxx" />
        <!--local环境,控制台输出的日志级别-->
        <property name="CONSOLE_LEVEL" value="INFO" />
    </springProfile>
    <springProfile name="dev">
        <!--dev环境,日志的存放位置-->
        <property name="LOG_HOME" value="/u01/logs/xxx" />
        <!--pro环境,控制台输出的日志级别-->
        <property name="CONSOLE_LEVEL" value="OFF" />
    </springProfile>
    <springProfile name="pro">
        <!--pro环境,日志的存放位置-->
        <property name="LOG_HOME" value="/u01/logs/xxx" />
        <!--pro环境,控制台输出的日志级别-->
        <property name="CONSOLE_LEVEL" value="OFF" />
    </springProfile>
    <!--日志存放最大数量-->
    <property name="maxHistory" value="30"/>

    <!--定义控制台输出的日志信息-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--把事件转化成byte数组,并把数组输出为文本-->
        <encoder>
            <!--定义输出的日志格式-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n</pattern>
        </encoder>
        <!--过滤输出的日志-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--定义日志的级别,大于此级别才输出日志-->
            <level>${CONSOLE_LEVEL}</level>
        </filter>
    </appender>
    
    <!--定义滚动日志-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志的存放名:目录+文件名-->
        <file>${LOG_HOME}/auth-open.info.log</file>
        <encoder>
            <!--日志输出格式-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n</pattern>
        </encoder>
        <!--基于时间滚动的日志-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件名的定义规则-->
            <fileNamePattern>${LOG_HOME}/auth-open.info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--保存文件的最大记录-->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
    </appender>
    <!--错误文件的滚动配置-->
    <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/auth-open.error.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/auth-open.error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
    </appender>

    <!--根目录日志级别是info-->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE-ERROR" />
    </root>

</configuration>

配置文件描述:①配置文件有变动自动扫描,扫描周期是60秒。②输出的根目录日志级别是info,日志文件配置了控制台输出,滚动日志输出,错误日志输出。③根据spring不同的激活环境,日志的输出目录配置为不同的值;开发环境控制台出入的级别为info(与根目录保持一致),线上环境和测试环境为off(不输出日志,因为控制台输出的日志与发布的jar包在同一目录下,没法进行删除,造成日志文件冗余)。④以日期为滚动文件的存储策略,设置日志最大存储量为30,大于30时,自动删除创建时间最早的日志。

4.1configuration

configuration是最外层的配置,在其内包含所有的配置信息。

scan:当配置文件发生变动时,是否自动扫描配置信息,true:自动扫描,false:不扫描。

scanPeriod:自动扫描的时间周期,默认是毫秒,当scan为true时才有效。

debug:是否打印logback内部日志信息,默认是false。

4.2springProfile

根据spring boot项目激活的文件,定义对应的配置信息,用于区分同一变量在不同环境下的值。

name:用于指定激活的配置文件,例如测试环境spring.profiles.active为dev,线上环境为pro,此时可以给不同的环境下同一变量设置不同的属性值。

property:定义变量,name为后续引用的名称,value为变量的值,后续可以使用${}引用此变量。

4.3root

root为配置文件的根节点,可以配置日志的级别和日志输出的引用。

level:日志级别。

appender-ref:日志追加的引用,配置ref值与appender标签关联使用。

4.4appender

定义日志追加的相关信息,name的值与appender-ref中的ref值对应。

4.5ConsoleAppender

控制台输出日志的类,存在于包ch.qos.logback.core.ConsoleAppender下,可以配置控制台输出的格式,日志级别。

4.6RollingFileAppender

滚动日志的类,存在于包ch.qos.logback.core.rolling.RollingFileAppender,可以滚动存放日志信息。

4.7RollingPolicy

滚动日志的策略,可以根据时间滚动TimeBasedRollingPolicy,时间和文件大小滚动SizeAndTimeBasedRollingPolicy。

fileNamePattern:滚动文件名的表达式。

maxHistory:最大历史记录,当大于最大历史记录时,会删除创建时间最早的一份日志记录

4.8encoder

把事件转化成byte数组,并把数组输出为文本。

4.9pattern

输出日志的格式表达式,例:

<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n</pattern>

%d:日期格式表达式,语法与SimpleDataFormat相同。

%thread:线程名。

%-5level:日志级别的前五位字符。

%logger{20}:输出类名(从左开始缩短 ,每个层级至少保留1位),20位,例:

完整logger名 : cn.xbz.test.HelloController

%logger : cn.xbz.test.HelloController

%logger{0}: HelloController

%logger{5}: c.x.t.HelloController

%logger{20}: c.x.test.HelloController

msg:日志信息。

4.10level级别

logback有5种级别,分别是Trace<Debug<Info<Warn<Error。

Trace:追踪,就是程序推进一下,你就可以写个trace输出。

Debug:指出细粒度信息事件,对调试程序非常有帮助。

Info:粗粒度级别上突出强调应用程序的运行过程。

Warn:输出警告及warn以下级别的日志。

Error:输出错误信息日志。

Off:关闭全部日志输出。

All:开启全部日志输出。

如果logger没有分配日志级别,会从被分配级别最近的父类那里继承级别,root logger默认级别是Debug。

5.自动清理文件原理

​ 每次执行日志追加的时候,都判断当前的日志对象是否满足滚动条件,满足则进行滚动处理;判断满足滚动条件是根据当前时间进行判断的,若是当前时间大于等于下次检查的时间,则进行日志滚动。看下RollingFileAppender类的追加日志源码:

 protected void subAppend(E event) {
        // 判断当前的日志对象是否满足滚动条件,如果满足则调用rollover()
        // 方法进行文件滚动
        synchronized (triggeringPolicy) {
            if (triggeringPolicy.isTriggeringEvent(currentlyActiveFile, 
                    event)){
                rollover();
            }
        }
        // 调用父类的方法,实际上是OutputStreamAppender的方法
        super.subAppend(event);
    }

校验是否进行滚动的判断方法源码:

    public boolean isTriggeringEvent(File activeFile, E event) {
        long time = this.getCurrentTime();
        //当前时间大于下次检查时间
        if (time >= this.nextCheck) {
            Date dateOfElapsedPeriod = this.dateInCurrentPeriod;
            this.addInfo("Elapsed period: " + dateOfElapsedPeriod);
            this.elapsedPeriodsFileName = this.tbrp.fileNamePatternWithoutCompSuffix.convert(dateOfElapsedPeriod);
            this.setDateInCurrentPeriod(time);
            this.computeNextCheck();
            return true;
        } else {
            return false;
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

logback基本配置说明 的相关文章

随机推荐

  • stm32 串口发送字符串第一个字节丢失、复位发送00

    1 stm32 串口发送字符串第一个字节丢失 这个问题如下解决 while USART GetFlagStatus USART1 USART FLAG TXE RESET 防止一个字节丢失 USART SendData USART1 dat
  • 魏副业而战:闲鱼无货源爆款热销产品推荐

    我是魏哥 与其在家躺平 不如魏副业而战 每天分享一个闲鱼技巧 今天给大家推荐一些闲鱼爆款 很多人做闲鱼过了新鲜期之后 觉得选品太难了 很羡慕那些月入过万每天爆单的人 那为什么别人能每天轻松卖出几十单 而自己却不知道上架什么产品呢 下面就告诉
  • 检查nacos是否正常启动

    可以通过以下几种方式检查nacos是否启动 查看nacos日志文件 启动nacos时 控制台会输出一些信息 可以查看控制台输出的信息 如果显示 Server startup in XXX ms 等字样 则说明nacos已经启动 查看端口是否
  • mybatis-plus 判断参数是否为空并作为查询条件

    方式一 在配置文件中加上全局配置 mybatis plus global config db config field strategy not empty 方式二 对某一字段单独进行判断非空 QueryWrapper
  • Stable Disffusion 采样器总结

    Stable Disffusion 采样器 1 Euler a Euler a 属于超快采样模式 采样10次 即可完成基本画面 但是继续提高采样步数 就基本脱离了提示词 是个插画 tag利用率仅次与DPM2和DPM2 a 环境光效菜 构图有
  • springcloud配置详解

    在这里插入代码片 1 版本信息 父项目 依赖管理 pom文件
  • git创建/合并分支原理

    来源 https blog csdn net abcnull article details 90288499 创建与合并分支简单原理 分支被合并可以被 d 删除 分支没有被合并 d 删除会出错 需要 D 强制删除 master分支 一个分
  • Mysql教程(一):Mysql数据模型和SQL语法分析

    Mysql教程 一 Mysql数据模型和SQL语法分析 1 Mysql数据模型 1 1 关系型数据库 RDBMS 概念 建立在关系模型基础上 由多张相互连接的二维表组成的数据库 特点 使用表存储数据 格式统一 便于维护 使用SQL语言操作
  • 宝塔使用composer安装laravel 时报错 The Process class relies on proc_open, which is not available on your PHP

    Symfony Component Process Exception RuntimeException The Process class relies on proc open which is not available on you
  • vue自定义全局组件(自定义插件)

    有时候我们在做开发的时候 就想自己写一个插件然后就可以使用自己的插件 那种成就感很强 博主最近研究element ui和axios的时候 发现他们是自定义组件 但是唯一有一点不同的是 在用element ui的时候是使用Vue use 语句
  • M35J型多普勒流量计使用说明书

    一 产品原理 产品有三个功能 测平均流速 测水深 测水温 并可显示断面流量 其中水温测量使用温度探头 温度探头不与水接触 紧贴仪器外包装材料顶部 需要置于水底一定时间后才能反映实际水温 测水温的目的是校正超声波在水中的速度 并修正压力传感器
  • CVPR 2021

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 本文转载自 AI人工智能初学者 Coordinate Attention for Efficient Mobile Network Design论文 https arx
  • Windows7(x64) 安装Python3.7.0

    日期 2018年8月8日 作者 Commas 注释 本文写Windows7 x64 安装Python3 7 0 讲述了基本的安装操作 同时也介绍了一些相关的基础知识 本文若有哪些地方写的有所纰漏 还望各位看客指出 谢谢 如果您想了解更多有关
  • ros调试IMU

    ROS与传感器教程 razor imu 9dof使用 新固件 说明 介绍如何使用razor imu 9dof m0 创客智造采购的产品已经刷好固件 可以跳过刷固件 进行测试即可 点击淘宝采购IMU板子 步骤 环境搭配和固件更新 imu板子通
  • Linux常用性能检测命令搜集

    我们在维护网站 管理后台时 经常遇到的问题比如 网络断开 磁盘剩余空间不足 CPU占用过高等等 针对这些问题事前预防总比事后处理要好 当系统出现问题时 我们更要能及时准确定位错误的原因 才能针对性地解决问题 下面搜集一些常用的系统命令及使用
  • 网络编程3——网络层复习(三次握手、四次握手、滑动窗口)

    bkg 一 分层模型结构 OSI七层模型 物 数 网 传 会 表 应 TCP IP 4层末次那个 网 链路层 网络接口层 网 传 应 应用层 http ftp nfs ssh telnet 传输层 TCP UDP 网络层 IP ICMP I
  • 关于textarea限制字数的总结

    在input标签中 只需要设置maxlength 200 即可 但是在textarea标签中 IE9及IE9以下浏览器是不支持的 IE10 IE11则支持 估计后续的版本应该都会支持 现在来说下怎么让大部分IE版本都支持textarea 标
  • MySQL:JDBC

    什么是JDBC JDBC Java DataBase Connectivity 称为 Java数据库连接 它是一种用于数据库访问的应用程序 API 由一组用Java语言编写的类和接口组成 有了JDBC就可以 用统一的语法对多种关系数据库进行
  • PID算法应用于室内温度控制的C语言实现

    我最近在学习PID算法 对此很感兴趣 所以与大伙分享下 有不足的地方欢迎指出 非常谢谢 PID算法的基本内容本篇博客就不做阐述了 网上有很多资料 文章的主题是用C语言实现PID算法 为了更好的理解 我采用软件模拟室内温度控制的方式与大伙分享
  • logback基本配置说明

    1 简介 logback继承自log4j 它是spring boot默认的日志集成框架 官网地址 https logback qos ch 2 spring boot默认日志框架 当我们启动spring boot项目的时候 没有进行任何日志