iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Logback如何在Springboot中使用
  • 490
分享到

Logback如何在Springboot中使用

2023-06-15 04:06:00 490人浏览 薄情痞子
摘要

Logback如何在SpringBoot中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、导入依赖普通项目<dependency>  &n

Logback如何在SpringBoot中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、导入依赖

普通项目

<dependency>    <groupId>ch.qos.logback</groupId>    <artifactId>logback-core</artifactId>    <version>1.1.11</version></dependency><dependency>    <groupId>ch.qos.logback</groupId>    <artifactId>logback-classic</artifactId>    <version>1.1.11</version></dependency>

springboot项目

<!--该依赖已经集成了logback--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-WEB</artifactId></dependency>

二、配置文件解析

Logback默认会到类路径下找logback-test.xml and logback.xml

Spring Boot 会在 classpath 下查找是否有 logback-test.groovy、logback-test.xml、logback.groovy 或者 logback.xml,如果都找不到的话,才会加载项目路径下的 logback-spring.xml

三、配置文件结构

Logback如何在Springboot中使用

四、各个组件的作用

logger: 日志记录器,root是特殊的logger-顶层logger,因为logger具有继承关系,稍后介绍

appender: 配置日志文件输出目的地

encoder: 控制日志输出格式,它是借助于layout实现的

rollingPolicy: RollingFileAppender具有该子元素,指定发生滚动时的行为

triggeringPolicy: RollingFileAppender具有该子元素,指定何时发生滚动过程,一般不用配置该元素,因为最受欢迎的TimeBasedRollingPolicy ,它实现了rolling policy同时也实现了triggering policy。

filter: 对appender收到的日志进行过滤,只有满足Filter条件的日志才输出到日志文件

五、Logger组件

logger组件具有父子层级关系,root是最顶层的logger。logger记录器是命名实体。它们的名称区分大小写,并且遵循分层命名规则.

如果一个记录器的名称后跟一个点,则该记录器是另一个记录器的祖先,该后跟点的名称是其后代记录器名称的前缀。如果记录器与子记录器之间没有祖先,则称该记录器为子记录器的父项。例如,名为"com.foo"的记录器是名为"com.foo.Bar"的记录器的父项。同样, "java"是"java.util"和"java.util.Vector"的祖先记录器。大多数开发人员都应该熟悉这种命名方案。

logger日志级别继承

如果未为给定的记录器分配一个级别,则它将从其最接近的祖先那里继承一个已分配的级别。例如:给定记录器L的有效级别等于其层次结构中的第一个非空级别,从L本身开始, 然后在层次结构中向上寻找直到root logger。为了确保所有记录器最终都可以继承级别,root logger始终具有分配的级别,root logger默认级别是DEBUG。

注意:如果日志记录请求的级别高于或等于记录器的有效级别,则该日志请求是有效的。日志级别按以下顺序排序: TRACE < DEBUG < INFO < WARN < ERROR。

logger关联的appender继承

一个logger可以配置多个appender,logger输出的日志会输出到当前记录器绑定的appender和父级们logger(直到root logger)绑定的appender,可以设置additivity 属性为false,则logger输出的日志仅会输出到当前记录器绑定的appender

六、logger属性

  • name:指定全限定包名

  • level:日志输出级别,如果没有配置,则参考上面的级别继承

  • additivity:默认为true,参考上面的appender继承。

如果additivity为true,会存在重复输出日志情况,如下所示

<configuration>  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">    <encoder>      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>    </encoder>  </appender>  <logger name="chapters.configuration">    <appender-ref ref="STDOUT" />  </logger>  <root level="debug">    <appender-ref ref="STDOUT" />  </root></configuration>

那么chapters.configuration包下的日志会输出两遍到console控制台,如下所示

36.343 [main] INFO  chapters.configuration.MyApp3 - Entering application.
14:25:36.343 [main] INFO  chapters.configuration.MyApp3 - Entering application.
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] INFO  chapters.configuration.MyApp3 - Exiting application.
14:25:36.359 [main] INFO  chapters.configuration.MyApp3 - Exiting application.

七、Appender组件

配置日志输出的目的地,常用的有ConsoleAppender、FileAppender 、RollingFileAppender

ConsoleAppender

 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">    <!--默认System.out,也可以指定System.error -->    <target>System.out</target>    <!-- encoders 默认类型ch.qos.logback.classic.encoder.PatternLayoutEncoder -->    <encoder>      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>    </encoder>  </appender>

写日志到标准输出流,可以配置target属性为system.out,也可以指定System.error,默认System.out

FileAppender

包含的子元素有

  • append:如果为true,则追加到已存在的日志文件,否则截断现有文件,默认为true

  • file: 指定日志写入文件的名字。如果文件不存在,则创建包括父级目录。windows系统要避开“\”,正确例子可以指定为c:/temp/test.log或c:\\temp\\test.log

  • encoder: 输出的格式 RollingFileAppender

RollingFileAppender

扩展了FileAppender,具有滚动更新日志文件的功能;例如,RollingFileAppender可以登录到一个名为log.txt的文件,一旦满足某个条件,就可以保存当前日志文件,并滚动输出到新的日志文件。

包含的子元素有

  • append:如果为true,则追加到已存在的日志文件,否则截断现有文件,默认为true

  • file: 指定日志写入文件的名字。如果文件不存在,则创建包括父级目录。windows系统要避开“\”,正确例子可以指定为c:/temp/test.log或c:\\temp\\test.log

  • encoder:输出的格式

  • rollingPolicy: 指定RollingFileAppender发生滚动时的行为

  • triggeringPolicy:指定RollingFileAppender何时发生滚动过程

 rollingPolicy

rollingPolicy常用的有TimeBasedRollingPolicy、SizeAndTimeBasedRollingPolicy

TimeBasedRollingPolicy

TimeBasedRollingPolicy是最受欢迎的滚动策略。它基于时间进行滚动,可以是按月或按天等。TimeBasedRollingPolicy承担滚动以及触发所述滚动的责任。它实现了rolling policy同时也实现了triggering policy。
包含的子元素有

  • fileNamePattern:必选;它的值应包括文件名以及适当放置的%d转换说明符。所述 %d由指定的转换说明可包含日期和时间模式 java.text.SimpleDateFORMat类。如果省略了日期和时间模式,则采用默认模式 yyyy-MM-dd;可以指定多个%d,但是只有一个主要的,其他的都要使用‘aux'标记,多个%d允许你组织对日志文件归类,例如按照年月分文件夹/var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log

  • maxHistory:设置存档文件保存时间,日志文件至少保存 15 天,因为有些异常具备以“周”为频次发生的特点。

  • totalSizeCap:控制归档文件的大小

SizeAndTimeBasedRollingPolicy

支持按照时间拆分后,再按文件大小拆分

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">    <file>mylog.txt</file>    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">      <!-- rollover daily -->      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>       <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->       <maxFileSize>100MB</maxFileSize>           <maxHistory>60</maxHistory>       <totalSizeCap>20GB</totalSizeCap>    </rollingPolicy>    <encoder>      <pattern>%msg%n</pattern>    </encoder></appender>

"%i"表示当日志文件达到“maxFileSize”它将按照递增序列(以0开始)归档日志。

triggering policy

SizeBasedTriggeringPolicy

该triggering policy通过配置一个maxFileSize参数,当日志文件超过该阈值,会通知RollingFileAppender 触发日志翻滚。但一般triggering policy可以不用配置,TimeBasedRollingPolicy 已经完美集成了。

补充:以上Appender都是本地记录日志,logback也支持网络输出日志、本地数据、邮件等;后续如果有需要再来研究。logback还可以使用AsyncAppender异步记录日志。

Encoder

encoder负责转换事件为字节数组并将字节数组写入输出流中。PatternLayoutEncoder 是最常用的encoder,该类通过使用PatternLayout来格式化日志事件。我们可以直接配置PatternLayoutEncoder ,而不用配置PatternLayout,它默认使用PatternLayout进行格式输出。

layout

负责转换事件成字符串,我们可以自定义layout,然后通过encoder引用

 <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">      <layout class="chapters.layouts.MySampleLayout" />    </encoder>

PatternLayout

它将日志事件转换成字符串,但是可以自定义字符串通过调整PatternLayout的转换模式。

PatternLayout的转换模式跟C语言的printf()函数紧密相关。
常用的模式有:

% d{pattern}: 日期

% level 日志级别

%thread 线程名称

%class 全限定类名,日志请求记录所在的类

%method 日志请求记录所在的方法

%line 日志请求记录的行号

%n 换行

%logger{length} 输出日志logger记录器的名字,length指定输出名字长度,logback会智能缩写而不丢失语义。

%msg 输出日志记录器记录的消息

<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS,CTT} %-5level [%thread] [%class:%line] %logger{50} - %msg%n</pattern></encoder>

多个模式之间分隔符,在大多数情况下,文字需包含空格或其他分隔字符('[',']','-'),这样就不会与转换词混淆

Filter

对appender收到的日志调用decide方法进行过滤,只有满足Filter条件的日志才输出到日志文件,decide方法有三个返回值,DENY、ACCEPT、NEUTRAL

  • 如果返回的值为DENY,则立即删除日志事件,而不咨询其余的筛选器;

  • 如果返回的值是NEUTRAL中性的,则查询列表中的下一个筛选器,如果没有其他筛选器可供查询,则日志事件将正常处理;

  • 如果返回值为ACCEPT,则会立即处理日志事件,跳过其余筛选器的调用。

 LevelFilter

该过滤器对日志的级别过滤,如果事件日志级别等于配置的级别,过滤器接受或者拒绝该事件日志,依赖于onMatch 和 onMismatch属性

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">    <filter class="ch.qos.logback.classic.filter.LevelFilter">      <level>INFO</level>      <onMatch>ACCEPT</onMatch>      <onMismatch>DENY</onMismatch>    </filter>    <encoder>      <pattern>        %-4relative [%thread] %-5level %logger{30} - %msg%n      </pattern>    </encoder></appender>

ThresholdFilter

过滤低于指定阈值的事件。对于等于或高于阈值的事件,将在调用其()方法时响应NEUTRAL 。但是,级别低于阈值的事件将被拒绝。

 <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">      <level>INFO</level>    </filter>

EvaluatorFilter

EvaluatorFilter 是封装了的通用过滤器 EventEvaluator。顾名思义, 评估对象是否满足给定事件的给定条件。在匹配和不匹配时,托管将分别返回由onMatch 或onMismatch属性指定的值。
GEventEvaluator 实现了EventEvaluator,通过子元素采用任意Groovy语言布尔表达式作为评估标准的具体实现
JaninoEventEvaluator实现了EventEvaluator,通过子元素采用任意Java语言块返回布尔值作为评估标准。

uatorFilter

EvaluatorFilter 是封装了的通用过滤器 EventEvaluator。顾名思义, 评估对象是否满足给定事件的给定条件。在匹配和不匹配时,托管将分别返回由onMatch 或onMismatch属性指定的值。
GEventEvaluator 实现了EventEvaluator,通过子元素采用任意Groovy语言布尔表达式作为评估标准的具体实现
JaninoEventEvaluator实现了EventEvaluator,通过子元素采用任意Java语言块返回布尔值作为评估标准。

EvaluatorFilter 也可通过子元素支持正则匹配。

springboot是什么

springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

看完上述内容,你们掌握Logback如何在Springboot中使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Logback如何在Springboot中使用

本文链接: https://www.lsjlt.com/news/277458.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Logback如何在Springboot中使用
    Logback如何在Springboot中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、导入依赖普通项目<dependency>  &n...
    99+
    2023-06-15
  • Springboot如何使用Logback实现日志配置
    这篇文章主要讲解了“Springboot如何使用Logback实现日志配置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Springboot如何使用Logback实现日志配置”吧!概述默认情...
    99+
    2023-07-04
  • 如何在SpringBoot中使用logback优化异常堆栈的输出详解
    目录一、背景二、需求三、使用的技术四、技术实现1、引入依赖2、代码实现3、使用 ShortenedThrowableConverter 来优化异常堆栈4、查看运行结果五、完整代码六、...
    99+
    2022-11-13
  • Springboot如何使用logback实现多环境配置?
    前言 Logback是由log4j创始人设计的又一个开源日记组件,Logback 当前分成三个模块:logback-core,logback- classic和logback-ac...
    99+
    2022-11-12
  • 详解Springboot之Logback的使用学习
    目录一、导入依赖二、配置文件解析三、配置文件结构四、各个组件的作用五、Logger组件六、logger属性七、Appender组件一、导入依赖 普通项目 <dependen...
    99+
    2022-11-12
  • 基于Springboot使用logback的注意事项
    Springboot logback的注意事项 项目使用SpringBoot搭建的,开发环境没有发现问题,日志输出位置也正常。 项目的日志没有使用默认配置文件名方式,而是一个环境一套...
    99+
    2022-11-12
  • springboot logback如何从apollo配置中心读取变量
    目录springbootlogback从apollo配置中心读取变量1、在apollo配置中心添加2、项目的application.yml配置文件配置如下3、在logback.xml...
    99+
    2022-11-12
  • springboot 使用logback启动报警报错的解决
    springboot logback启动报警报错 报错信息如下: 16:06:07,484 |-INFO in ch.qos.logback.classic.LoggerCont...
    99+
    2022-11-12
  • 使用springboot logback动态获取application的配置项
    目录springboot logback动态获取application的配置项logback自身支持以下方式配置因此只能使用spring提供的标签来对此参数进行配置springboo...
    99+
    2022-11-12
  • springboot中怎么利用logback启动报警报错如何解决
    本篇文章为大家展示了springboot中怎么利用logback启动报警报错如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。springboot logback启动报警报错报错信息如下:16:...
    99+
    2023-06-20
  • filter如何在springboot中使用
    filter如何在springboot中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、在spring的应用中我们存在两种过滤的用法,一种是拦截器、另外一种当然是过滤器。...
    99+
    2023-05-30
    springboot filter
  • 如何在SpringBoot中使用Swagger2
    如何在SpringBoot中使用Swagger2?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。引入依赖<dependency>   ...
    99+
    2023-06-14
  • Actuator如何在SpringBoot中使用
    今天就跟大家聊聊有关Actuator如何在SpringBoot中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Spring Boot有四大神器,分别是auto-configura...
    99+
    2023-05-30
    springboot actuator
  • springboot如何使用logback-spring配置日志格式,并分环境配置
    配置不生效的解决办法 注意:如果配置不生效,则说明spring优先加载了其他配置: 解决办法: 添加启动参数 -Dlogging.config=classpath:logb...
    99+
    2022-11-12
  • 在Spring Boot中使用slf4j与logback如何实现配置日志
    这期内容当中小编将会给大家带来有关在Spring Boot中使用slf4j与logback如何实现配置日志,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。spring boot主要的目的是:为 Spring...
    99+
    2023-05-31
    springboot slf4j logback
  • Logback的使用及如何配置
    目录1 为什么选用Logback?2 Logback的配置3 Logback的输出格式4 Appender5 Logback使用过程中遇到的问题日志在项目开发过程的作用不言而喻,项目...
    99+
    2022-11-12
  • Springboot使用Logback实现日志配置与异常记录
    目录概述logback配置详解logback配置异常情况概述 默认情况下,SpringBoot内部使用logback作为系统日志实现的框架,将日志输出到控制台,不会写到日志文件。如果...
    99+
    2022-11-21
    Springboot Logback 日志配置 Springboot Logback异常记录 Springboot Logback
  • 如何使用Logback设置property参数
    这篇文章主要讲解了“如何使用Logback设置property参数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Logback设置property参数”吧!Logback设置prop...
    99+
    2023-07-05
  • Thymeleaf方法如何在SpringBoot中使用
    Thymeleaf方法如何在SpringBoot中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。ThymeleafThymeleaf是最近SpringBoot推荐支持的模板...
    99+
    2023-05-31
    springboot thymeleaf
  • 在SpringBoot中如何使用拦截器
    本篇文章为大家展示了在SpringBoot中如何使用拦截器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。自定义自己的拦截类,拦截类需要继承HandlerInterceptor接口并实现这个接口的方法...
    99+
    2023-05-31
    springboot 拦截器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作