Spring如何动态自定义logback日志目录详解

问题场景

一般情况下,日志打印的内容都是根据配置文件中配置的pattern格式指定好的。在我们调用logger.info(), logger.debug()等日志打印方法时,打印的内容格式与配置文件中的pattern格式一致。

例如,在logback.xml配置文件中指定了日志打印格式:

%d{HH:mm:ss.SSS} %-5level [%thread][%logger{0}-%L] %msg%n"。

这些格式的意义在官网的文档上都有说明。其中%msg就是我们调用日志打印方法时输入的内容。

当官方指定的这些格式不能满足我们的需求,或者是我们需要在打印日志的时候,需要加上一些比较有规律的内容,例如打印本机的hostname/ip等logback本身没有提供的格式的时候,我们就可以自定义日志输出的内容与格式。

最近在业务开发中,就 遇到一个场景. 日志目录需要根据不同的一个业务id存储. 故需要动态存储logback的日志,下面话不多说了,来一起看看详细的介绍吧

解决办法

在springboot中, 或者spring相关框架中, 可以通过实现logback的PropertyDefinerBase方法来动态决定日志目录.

// 通过实现logback的PropertyDefinerBase方法,动态定义logback配置中的变量
@Component
public class DefineDir extends PropertyDefinerBase {

 @Override
 public String getPropertyValue() {
  return "动态参数";
 }
}
<configuration>

 // 通过DefineDir类映射自定义变量, 实现动态修改logback的日志目录
 <define name="dirXxx" class="com.xxx.DefineDir" />

 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>../logs/${dirXxx}/info.log</file>
  <encoder>
   <charset>UTF-8</charset>
   <pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} [%thread] [%X{requestId}] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
 </appender>

 <root level="INFO">
  <appender-ref ref="FILE" />
 </root>
</configuration>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • SpringBoot通过yml和xml文件配置日志输出方法

    SpringBoot中默认使用Logback进行日志输出,可以同时使用SpringBoot框架的配置文件application.yml或是通过logback的配置文件logback.xml进行配置. 通过application.yml配置 <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 Lo

  • SpringBoot中使用AOP打印接口日志的方法

    前言 AOP 是 Aspect Oriented Program (面向切面)的编程的缩写.他是和面向对象编程相对的一个概念.在面向对象的编程中,我们倾向于采用封装.继承.多态等概念,将一个个的功能在对象中来实现.但是,我们在实际情况中也发现,会有另外一种需求就是一类功能在很多对象的很多方法中都有需要.例如有一些对数据库访问的方法有事务管理的需求,有很多方法中要求打印日志.按照面向对象的方式,那么这些相同的功能要在很多地方来实现或者在很多地方来调用.这就非常繁琐并且和这些和业务不相关的需求耦合太

  • Spring Boot 使用 logback、logstash、ELK 记录日志文件的方法

    Spring Boot 下,尝试使用 log4j 记录日志到 logstash,在src/main/resources 目录下添加 log4j.properties 文件进行自定义输出日志文件,未能成功.在 application.yml 中 配置 logging path 打印日志成功了,但是未能调试成功日志分文件记录.网上查阅资料,说是 Spring Boot 默认使用 logback 记录日志.log4j 多次尝试后无果,遂改为使用 logback 记录,最终测试成功. 1. 关于 Spr

  • springboot整合mybatis将sql打印到日志的实例详解

    在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-

  • Spring MVC打印@RequestBody、@Response日志的方法

    问题描述: 使用JSON接收前端参数时, SpringMVC默认输出日志如下: o.s.web.servlet.DispatcherServlet : POST "/example_project/app/login", parameters={} parameters={}无法打印出JSON消息内容. 如果自己实现参数打印, 则需要从reqeust.getInputStream中获取JSON内容, 但是由于流只能读取一次, 所以会导致后续SpringMVC解析参数异常. 网上找到一种

  • SpringBoot记录Http请求日志的方法

    在使用Spring Boot开发 web api 的时候希望把 request,request header ,response reponse header , uri, method 等等的信息记录到我们的日志中,方便我们排查问题,也能对系统的数据做一些统计. Spring 使用了 DispatcherServlet 来拦截并分发请求,我们只要自己实现一个 DispatcherServlet 并在其中对请求和响应做处理打印到日志中即可. 我们实现一个自己的分发 Servlet ,它继承于 D

  • 详解Spring Boot下使用logback 记录多个文件日志

    背景 这两天遇到一个比较有意思的日志问题. 近期对我之前的python代码进行java的重构, 一方面是因为java使用的医疗库非常健全稳定, 可以商用. 另一方面是因为java速度快, 这个库的实现的效率也高, 性能是Python版本的好几倍. 但是作为这个项目的唯一作者, 我的癖好也成为这个项目的风格. 这个项目会给很多部署工程师使用. 当然项目的可用性和性能作为第一考虑的因素, 但是作为一个懒人, 对使用软件时候的复杂部署过程和混乱调试信息深恶痛绝. 所以我在项目中使用了高度可配置/易用和

  • Spring Boot 把配置文件和日志文件放到jar外部

    如果不想使用默认的application.properties,而想将属性文件放到jar包外面,可以使用如下两种方法: 只能设置全路径.因为Java -jar运行jar包时,无法指定classpath(无论通过参数还是环境变量,设置的classpath都会被覆盖). 方法1:命令行传参指定spring.config.location java -jar -Dspring.config.location=D:\zTest\config\config1.properties springbootre

  • Spring Boot2集成AOPLog来记录接口访问日志

    前言 日志是一个Web项目中必不可少的部分,借助它我们可以做许多事情,比如问题排查.访问统计.监控告警等.一般通过引入slf4j的一些实现框架来做日志功能,如log4j,logback,log4j2,其性能也是依次增强.在springboot中,默认使用的框架是logback. 我们经常需要在方法开头或结尾加日志记录传入参数或返回结果,以此来复现当时的请求情况.但是手动添加日志,不仅繁琐重复,也影响代码的美观简洁.本文引入一个基于AOP实现的日志框架,并通过spring-boot-starter

  • SpringBoot继承LogStash实现日志收集的方法示例

    一.环境准备 安装Elasticsearch.kibana.logstash,教程链接 安装教程 二.配置SpringBoot 依赖 在springBoot 项目下pom文件增加logStash 依赖包 <!--logStash--> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId>

随机推荐