首页 > 其他分享 >SpringBoot集成Logback遇到的问题

SpringBoot集成Logback遇到的问题

时间:2023-02-17 21:11:16浏览次数:54  
标签:集成 xml ch qos SpringBoot core Logback spring logback

 

SpringBoot集成Logback遇到的问题

https://zhuanlan.zhihu.com/p/540737614

 解决log4j和self4j日志报错Could NOT find resource [logback.groovy]及Could NOT find resource [logback-test.xml]问题

https://blog.51cto.com/u_15009374/3148829

 

____________________________________________________________________________________________________________________________________

目录 收起 一、如何集成logback到SpringBoot项目 二、集成logback到SpringBoot项目遇到的问题 三、总结一下 历史文章

欢迎大家点点关注,可以最先收到定期更新的 SpringBoot 以及 Java 编程相关知识文章。

最近在写日志的一些处理,需要涉及到logback,遇到了一些问题,下面我把我集成logback的过程以及遇到的问题逐步写出来。

一、如何集成logback到SpringBoot项目

实际上SpringBoot项目如果咱们使用starter的话,默认是已经集成了。

如果需要单独引用不同的版本,可以单独引入maven包。

<!-- 导入logback日志的jar -->
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>1.2.3</version>
</dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-core</artifactId>
	<version>1.2.3</version>
</dependency>

如果不修改输出日志格式,默认即可,如果需要自己改造日志格式,则需要在resources文件夹中增加logback-spring.xml并修改。

因为咱们是使用的SpringBoot项目,因此使用logback-spring.xml,后面问题中有这个的坑,咱们在问题中再说。

logback-spring.xml文件,这里面配置了三个输出,分别是STDOUT(控制台输出格式),ERROR(错误日志文件输出),FILE(日志文件输出),其中pattern表示具体显示的格式,另外更高级的可以自定义增加变量,比如一些openId输出的日志中,具体格式我注释在了代码中,[%X{openId}]。如果要对日志做一些处理,可以增加配置converterClass,这个类需要继承extends MessageConverter。

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
  <conversionRule conversionWord="msg" converterClass="cn.xuesong.LogMaskConverter" />
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{openId}] [%level] [%thread] [%c] - %msg%n</pattern> -->
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%c] - %msg%n</pattern>
    </encoder>
  </appender>
  <appender name="FILE"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/xuesong.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <FileNamePattern>${LOG_PATH}/xuesong.%d{yyyy-MM-dd}.log.gz</FileNamePattern>
      <MaxHistory>30</MaxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%c] - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>ERROR</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_PATH}/xuesong.%d{yyyy-MM-dd}.error</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%c] - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="INFO">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="ERROR" />
  </root>
</configuration>

有了以上两个配置之后,应该就ok了,但我自己遇到了一些问题,下面该进入我自己遇到的问题了。

二、集成logback到SpringBoot项目遇到的问题

  1. logback-spring.xml文件失效

我在SpringBoot启动类所在的module中资源文件夹resources中增加了logback-spring.xml之后,无论如何都不按照我的格式输出。

然后我把logback-spring.xml名字修改成logback.xml发现好用了(但仍然报错),通过idea快捷键(此处有坑)搜索找不到另外一个logback.xml,纳闷了半天,怎么回事。

通过手工查找,发现某个子module包含了logback.xml这个文件,最终发现,我是通过idea的快捷键(Find in Path)查找的,这个不是搜索文件的,而是搜索文件中的内容文字的。。。。。感觉被扇了一记响亮的耳光,需要通过Navigate File的快捷键搜索文件名字,我错了,用了这么久idea发现用错了,真打脸

2. logback.xml文件的日志输出处理类报错

然后我把我上面的logback-spring.xml中的内容整个复制到了我找到的这个logback.xml之后,启动服务,日志是能够按照我的格式输出了,但是最初的几行日志抱错,具体如下

17:27:04,400 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
17:27:04,401 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
17:27:04,402 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:********/target/classes/logback.xml]
17:27:04,554 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
17:27:04,555 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word msg with class [cn.xuesong.LogMaskConverter]
17:27:04,555 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
17:27:04,566 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
17:27:04,603 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@68bbe345 - Failed to instantiate converter class [cn.xuesong.LogMaskConverter] for keyword [msg] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type cn.xuesong.LogMaskConverter
  at ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type cn.xuesong.LogMaskConverter
  at  at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:69)
  at  at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:45)
  at  at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:34)
  at  at ch.qos.logback.core.pattern.parser.Compiler.createConverter(Compiler.java:104)
  at  at ch.qos.logback.core.pattern.parser.Compiler.compile(Compiler.java:63)
  at  at ch.qos.logback.core.pattern.parser.Parser.compile(Parser.java:87)
  at  at ch.qos.logback.core.pattern.PatternLayoutBase.start(PatternLayoutBase.java:84)
  at  at ch.qos.logback.classic.encoder.PatternLayoutEncoder.start(PatternLayoutEncoder.java:28)
  at  at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:161)
  at  at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
  at  at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
  at  at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
  at  at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)

我开始怀疑了,啥原因?然后试着去掉我增加的内容,就不报错了,怎么回事呢?

  <conversionRule conversionWord="msg" converterClass="cn.xuesong.LogMaskConverter" />

加上就报错,删掉不报错,后来仔细思考了下,是因为logback.xml和logback-spring.xml的原因。

咱们先说说logback.xml和logback-spring.xml,logback.xml是logback默认的输出文件,启动早于SpringBoot,因此是没有springbean注入的,而我的LogMaskConverter,是使用了spring的一些内容的,因此在logback初始化时候无法初始化LogMaskConverter类,导致报错。

而logback-spring.xml是在SpringBoot基础bean初始化完成后,则开始初始化logback,因此这个时候再引入LogMaskConverter就不会报错,因此如果要使用Spring的一些内容格式化输出,需要配置logback-spring.xml,如果不需要Spring,则logback.xml就行了。

所以我把logback.xml名字修改为logback-spring.xml后,再次启动,完美运行,不再报错了。

三、总结一下

1. logback.xml和logback-spring.xml不要乱用,有优先级,默认是存在logback.xml就使logback-spring.xml失效。

2. 如果需要使用spring的一些内容需要配置在logback-spring.xml中,如果配置在logback.xml启动开始虽然会报错,但是springboot初始化一些内容后,日志可以按照格式输出。

SpringBoot集成Logback遇到的问题

标签:集成,xml,ch,qos,SpringBoot,core,Logback,spring,logback
From: https://www.cnblogs.com/kelelipeng/p/17131505.html

相关文章

  • SpringBoot学习记录(1)——@Autowired在集合上的作用
    publicclassSmsHandlerextendsBaseHandlerimplementsHandler{@AutowiredprivateMap<String,SmsScript>smsScripts;//......}例如如上,一个......
  • CI/CD的小解释与集成概念
    简单描述:CI/CD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD的核心概念是持续集成,持续交付和持续部署。作为一个面向开发和运营团队的解决方案......
  • springboot接入kafka
    1、windows下安装、启动kafka,这一步只是搭建环境​​https://blog.51cto.com/u_15595167/6026035​​2、安装kafka管理工具:kafkamanager,推荐linux下安装,windows下编译等很麻......
  • 使用SpringBoot简单实现WebRTC群聊会议室(Mesh方案)
    近期需要做一个类似会议室功能,但网络上大多数是一对一通信,故记录分享希望帮助到有用的人WebRTC一对一聊天原理关于WebRTC建立一对一聊天的模板网上很多,可参考以下博客:spr......
  • 使用springboot cache + redis缓存时使用gzip压缩以提升性能
    背景在高并发的场景中,我们通常会使用缓存提升性能。在使用springbootcache时,我们通常会使用基于JSON的序列化与反序列化。JSON具有可读性强,结构简单的特点,使用灵活。但......
  • springboot加入cloud,并注册到nacos
    pom.xml下新增 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> <version>2.2.5.RELEASE</version> ......
  • 智能建筑中高低压配电设备集成和管理系统应用分析
    罗轩志安科瑞电气股份有限公司上海嘉定201801[摘要]电力智能监控系统是信息时代的产物,反映了人类在高效经济时代对生活质量的不断追求,美好的希望和简化的工作程序。当前,正......
  • 软件持续化集成六步法
    早在20世纪80年代,微软 Office 产品研发团队就使用一种开发实践,称作每日构建(dailybuild),也叫每晚构建(nightlybuild)。它是指每天定时自动执行一次软件构建工作,也就是......
  • SpringBoot 整合 RabbitMQ
    SpringBoot整合RabbitMQ生产者application.yml#配置RabbitMQ的基本信息spring:rabbitmq:#iphost:192.168.36.100#usernameuse......
  • MyBatis、LogBack XML文件模板
    xxxMapper模板<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper......