资讯详情

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

文章目录

  • 一、什么是日志?
  • 二、logback简介
  • 三、在springboot使用
    • 1、简易使用
    • 2、高级使用
      • ① logger记录器
      • ② appender 附加器
      • ③root根记录器
  • 四、项目真实案例
  • 总结


一、什么是日志?

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

  • 如果没有日志,一旦程序出现问题,就很难立即定位问题。特别是访问第三方接口、随机或偶尔的问题和难以再现的问题。

我以前听说过一句话:只有在程序出现问题后,我才能知道做一个好的日志有多重要。

二、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个常用属性

② appender 附加器

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

了解3个常用附加器

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

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

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

1️⃣

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️⃣

过滤器 可以把日志信息做一个分类。如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样,文档回滚规则,过滤器 创建根记录器

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

标签: kyb18d微差压变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台