springboot使用自带logback日志框架,省时省力


一、什么是日志

  • 日志的作用是用来追踪和记录我们的程序运行中的信息,我们可以利用日志很快定位问题,追踪分析。

  • 如果没有日志,程序一旦出现问题,很难一下子就能定位问题。尤其是访问第三方接口、随机或偶尔出现的问题、很难再现的问题。

之前听说过一句话:“只有在程序出问题以后才会知道打一个好的日志有多么重要。”

二、logback简介

官网:https://logback.qos.ch/manual/introduction.html

  • 目前比较常用的Java日志框架: Logback、log4j、log4j2、JUL等等。

  • Logback是在log4j 的基础上重新开发的一套日志框架,是完全实现SLF4J接口API(也叫日志门面)。

  • Logback 的架构非常通用,可以应用于不同的环境。目前logback分为三个模块,logback-core、logback-classic和logback-access。

  • logback-core 模块为其他两个模块奠定了基础。logback-classic模块 原生实现了SLF4J API,因此您可以轻松地在 logback 和其他日志记录框架(例如 log4j 1.x 或 java.util.logging (JUL))之间来回切换。

  • logback-access 模块与 Tomcat 和 Jetty 等 Servlet 容器集成,以提供 HTTP 访问日志功能。请注意,您可以轻松地在 logback-core 之上构建自己的模块。

三、在springboot使用

logback是springboot默认使用日志,所以不用配置也是能正常使用呢

1、简易使用

可在 application.yml 设置输出的路径

logging:
  file:
    name: /upload/logs/exceptions.log
  logback:
    rollingpolicy:
      file-name-pattern: /upload/logs/exceptions-%d{yyyy-MM-dd}.%i.log
      clean-history-on-start: false
      max-file-size: 1GB
      total-size-cap: 10GB
      max-history: 7

name: 这里是指定输出路径和文件名称。
logback:文件归档保存规则

在全局异常处理的地方使用
语法:

 final Logger logger = LoggerFactory.getLogger(“名称”);

使用

protected final Logger logger = LoggerFactory.getLogger(this.getClass());

输出

logger.error("异常原因是:",e);

使用小案例

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld1 {

  public static void main(String[] args) {

    Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld1");
    logger.debug("Hello world.");

  }
}

2、高级使用

高级使用 这里就在 logback.xml,这个是springboot。默认引用的日志配置,在resources新建文件
在这里插入图片描述

接着需要了解几个配置参数

① logger记录器

日志记录器(Logger):控制要输出哪些日志记录语句,对日志信息进行级别限制。

了解3个常用属性

  • name属性:记录器的名称
  • level 属性:记录器的基本 (TRACE < DEBUG < INFO < WARN < ERROR)
  • additivity属性:是否允许叠加打印日志。true或false

② appender 附加器

记录器会将输出日志的任务交给附加器完成,不同的附加器会将日志输出到不同的地方,比如控制台附加器、文件附加器、网络附加器等等。

了解3个常用附加器

  • 控制台附加器: ch.qos.logback.core.ConsoleAppender

  • 文件附加器: ch.qos.logback.core.FileAppender

  • 滚动文件附加器: ch.qos.logback.core.rolling.RollingFileAppender

1️⃣重要属性 pattern 样式

pattern由文字文本和转换说明符组成。我们可以在其中自由插入任何文字文本,每个转换说明符都以百分,后跟可选的格式修饰符、转换字和大括号之间的可选参数。转换字控制要转换的数据字段,例如记录器名称、级别、日期或者线程名称。格式修饰符控制字段宽度,填充以及对齐方式。

常用的参数

参数说明样式
%date{ISO8601}日志时间相当 %date{yyyy-MM-dd HH:mm:ss.SSS}
%level日志级别显示级别info、warn、error
%thread日志线程如:restartedMain
%logger记录器名称-如:xyz.kszs.Starter
%msg日志信息Started Starter in 3.928 seconds (JVM running for 5.342)
%n如长度不够会在左边加空格-

默认官方样式
在这里插入图片描述
我项目常用的

%date{ISO8601} %level [%thread] %logger{56} : %msg%n

效果
在这里插入图片描述
2️⃣ 重要的属性 过滤器 Filter

过滤器 可以把日志信息做一个分类。如info统一放在一个文件夹。warn 统一放在一个文件夹。error统一放在统一文件夹

常用过滤器有4个。这里说明一下,我项目用 级别过滤器
LevelFilter(级别过滤器) : 实现类 ch.qos.logback.classic.filter.LevelFilter

在项目这么用的

<!--过滤器,只记录INFO级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>INFO</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
</filter>

③root根记录器

置根记录器的级别为INFO, root标签等于标签

四、项目真正案例

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds" debug="false">
    <!-- 日志路径 部署在服务器 文件夹需要设计777权限 -->
    <property name="log.base" value="/logs/KYB"/>
    <!--日志存储天数-->
    <property name="log.max.days" value="30"/>
    <!-- 日志文件大小 -->
    <property name="log.max.size" value="500MB"/>
    <!-- 输出格式-->
    <property name="log.pattern" value="%date{ISO8601} %level [%thread] %logger{56} : %msg%n"/>
    <!--字符集-->
    <property name="log.charset" value="UTF-8"/>

    <!--控制台-附加器 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
            <charset>${log.charset}</charset>
        </encoder>
    </appender>

    <!--info-附加器-->
    <appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.base}/info/_info.log</file><!--存储路径-->
        <!-- 输出格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
            <charset>${log.charset}</charset>
        </encoder>
        <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--按天回滚-->
            <fileNamePattern>${log.base}/info/archive/info_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!--日志最大存储天数-->
            <maxHistory>${log.max.days}</maxHistory>
            <!--当天的日志 超过大小 压缩日志并保存 -->
            <maxFileSize>${log.max.size}</maxFileSize>
        </rollingPolicy>
        <!--过滤器,只记录INFO级别的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--warn-附加器-->
    <appender name="warnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.base}/warn/_warn.log</file><!--存储路径-->
        <!--输出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
            <charset>${log.charset}</charset>
        </encoder>
        <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.base}/warn/archive/warn_%d{yyyy-MM-dd}.%i.log.zip
            </fileNamePattern>
            <!--日志最大存储天数-->
            <maxHistory>${log.max.days}</maxHistory>
            <!-- 当天的日志 超过大小 压缩日志并保存 -->
            <maxFileSize>${log.max.size}</maxFileSize>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--error-附加器-->
    <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.base}/error/_error.log</file><!--存储路径 -->
        <!--输出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
            <charset>${log.charset}</charset>
        </encoder>
        <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.base}/error/archive/error_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!--日志最大存储天数-->
            <maxHistory>${log.max.days}</maxHistory>
            <!-- 当天的日志 超过大小 压缩日志并保存 -->
            <maxFileSize>${log.max.size}</maxFileSize>
        </rollingPolicy>
        <!--级别-过滤器 error-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName -->
    <logger name="org.springframework.aop.framework.CglibAopProxy" additivity="false">
        <level value="info" />
        <appender-ref ref="stdout" />
    </logger>
    <!-- root将级别为“DEBUG”及大于“DEBUG”的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console -->
    <root level="info">
        <appender-ref ref="stdout" /> <!-- 标识这个appender将会添加到这个logger -->
        <appender-ref ref="infoFile" />
        <appender-ref ref="warnFile" />
        <appender-ref ref="errorFile" />
    </root>
</configuration>


效果
在这里插入图片描述
更改你需要地址,就可以在你项目使用呢
在这里插入图片描述
注意,要设置服务器文件夹权限(777)

总结

在springboot 使用默认 logback,不需要引入任何依赖。
在resources,新建文件logback.xml.系统默认这个文件。
创建记录器
创建附加器
附加配置pattern样,文档回滚规则,过滤器
创建根记录器

如果帮助到大家,可以点赞👍,收藏⭐,关注,谢谢

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值