spring boot输出日志到文件,

  spring boot输出日志到文件,

  00-1010 1.背景2。要求3。技术实现4。代码实现1。写入xml日志文件2。写QQ模块3的代码。编写登录模块5的代码。运行结果6。完成代码7。一个小知识点的总结。

  00-1010在我们的开发过程中,可能会存在以下情况:

  1.有时候我们需要调用第三方的接口。一般来说,当我们调用接口时,我们会记录请求的参与和响应。如果我们自己系统的日志和第三方的日志混在一个日志文件里,可能会比较麻烦找不到日志。那么,我们是否可以将第三方系统的日志单独放在另一个文件中呢?

  2.或者有时我们的系统需要迁移数据。如果某段数据迁移失败,单独放在一个日志文件里是不是更清晰?

  

目录

 

  从上图可以看出,我们的需求比较简单。

  1.系统启动日志和登录模块日志记录在springboot-spring.log文件中。

  2.第三方商务(QQ)模块的日志记录在springboot-qq.log文件中。

  3.第三方商务(QQ)模块提供了一个登录(loginName)方法,该方法的登录名需要记录在springboot-qqLoginName.log文件中。模拟1。后台提到的数据迁移失败,失败的数据记录在单独的日志文件中。

  00-1010 1.采用的日志框架

  这里用Logback来记录日志,因为SpringBoot应用默认是用logback来记录日志。

  2.如果实现子模块和子文件日志记录,1。写appender,可以简单了解日志需要输出到哪里。

  例如:

  !-此处定义的日志输出到console-appender name= stdout class= ch . QoS . log back . core . console appender 编码器模式% d { yyyy-mm-ddhh 3360mm 3360 ss . SSS }[$ { PID :-}][% thread]%-5 level % logger { 50 } # % method :% L-% msg % n/pattern/encoder/appender!-这里定义的日志输出到springboot-qq- date。哪个?日志文件-appender name= QQ appender class= ch . QoS . log back . core . rolling . rolling文件appender rolling policy class= ch。QoS . log back . core . rolling . sizeandtimebasedrolling策略 filename pattern logs/spring boot-QQ-% d { yyyy-mm-DD }-。% I . log/filename pattern/rolling policy/appender 2、如何实现模块输出日志

  这里我们需要配置记录器。logger的name属性被赋给具体的完整包名,然后我们就可以参考上面定义的appender了。

  !-单独使用qqAppender输出QQ包下的日志-logger name= com . Huan . spring boot . QQ level= info additive= false Appender-ref= QQ Appender /Appender-ref= stdout //logger配置logger,其名称是需要单独生成文件的包的完整包名,然后引用上面定义的Appender。

  3.如果实现将loginName输出到指定的文件

  实际上是用Logger实现的,logger的名字需要和LoggerFactory.getLogger一样(在这里写下具体logger名字的值)。

  注意:

  这里可能有一个漏洞,就是类名可能会丢失,那么怎么解决呢?可以用MDC解决。

  .% X { class name } # % method :% L-% msg % n

  MDC.put("CLASSNAME", QQService.class.getName());qqLoginName.info("登录用户:[{}]", loginName);即xml中使用%X{CLASSNAME},在java代码中使用MDC存入CLASSNAME的值。

  

 

  

四、代码实现

 

  

1、编写xml日志文件

1、编写appender

 

  1、输出日志到控制台

  

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [${PID:- }] [%thread] %-5level %logger{50}#%method:%L -%msg%n</pattern> <charset>UTF-8</charset> </encoder></appender>

2、编写login模板的日志

 

  

<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>logs/springboot-spring-%d{yyyy-MM-dd}-.%i.log</fileNamePattern> <maxHistory>7</maxHistory> <maxFileSize>1MB</maxFileSize> <totalSizeCap>2GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [${PID:- }] [%thread] %-5level %logger{50}#%method:%L -%msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender>

3、编写qq模板的日志

 

  

<appender name="qqAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>logs/springboot-qq-%d{yyyy-MM-dd}-.%i.log</fileNamePattern> <maxHistory>7</maxHistory> <maxFileSize>1MB</maxFileSize> <totalSizeCap>2GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [${PID:- }] [%thread] %-5level %logger{50}#%method:%L -%msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender>

4、编写qq模块loginName单独输出到文件的日志

 

  

<appender name="qqLoginNameAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>logs/springboot-qqLoginName-%d{yyyy-MM-dd}-.%i.log</fileNamePattern> <maxHistory>7</maxHistory> <maxFileSize>1MB</maxFileSize> <totalSizeCap>2GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [${PID:- }] [%thread] %-5level %X{CLASSNAME}#%method:%L -%msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender>

2、配置日志输出到具体位置

 

  1、配置login模块

  

<root level="INFO"> <appender-ref ref="stdout"/> <appender-ref ref="file"/></root>

login模块属于我们自己的系统模块,此处使用 root标签来配置。

 

  2、配置qq模块

  

<!-- 在QQ这个包下的日志单独使用 qqAppender 来输出 --><logger name="com.huan.springboot.qq" level="info" additivity="false"> <appender-ref ref="qqAppender"/> <appender-ref ref="stdout"/></logger>

此处name的值直接指定到了qq的全包名路径。

 

  3、配置loginName单独输出到文

  

<!-- 将所有的QQ登录名防止在另外的文件中 --><logger name="qqLoginName" level="info" additivity="false"> <appender-ref ref="qqLoginNameAppender"/> <appender-ref ref="stdout"/></logger>

 

  

2、编写QQ模块的代码

@Componentpublic class QQService { private static final Logger log = LoggerFactory.getLogger(QQService.class); // getLogger("qqLoginName") 里的 qqLoginName 需要和 logback-spring.xml 中 logger的name一致,才会应用 private static final Logger qqLoginName = LoggerFactory.getLogger("qqLoginName"); public void login(String loginName) { log.info("QQ业务: 用户:[{}]开始使用QQ来登录系统", loginName); MDC.put("CLASSNAME", QQService.class.getName()); qqLoginName.info("登录用户:[{}]", loginName); }}

 

  

3、编写login模块的代码

@RestControllerpublic class LoginController { private static final Logger log = LoggerFactory.getLogger(LoginController.class); @Resource private QQService qqService; @GetMapping("login/{loginName}") public String login(@PathVariable("loginName") String loginName) { log.info("自己业务:用户:[{}]进行登录", loginName); qqService.login(loginName); return "ok"; }}

 

  

五、运行结果

 

  可以看到得到了我们期望的结果。

  

 

  

六、完整代码

https://gitee.com/huan1993/spring-cloud-parent/tree/master/springboot/springboot-logger-split-file

 

  

 

  

七、一个小知识点

在SpringBoot中,如果我们要覆盖默认的logback配置,推荐使用logback-spring.xml来配置。

 

  

 

  

 

  

总结

到此这篇关于Spring如何按业务模块输出日志到不同文件的文章就介绍到这了,更多相关Spring输出日志内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • spring编程式事务处理,spring编程事务
  • spring编程式事务处理,spring编程事务,详解Spring学习之编程式事务管理
  • spring的核心功能模块有几个,列举一些重要的spring模块
  • spring的核心功能模块有几个,列举一些重要的spring模块,七个Spring核心模块详解
  • spring注解和springmvc的注解,SpringMVC常用注解
  • spring注解和springmvc的注解,SpringMVC常用注解,详解springmvc常用5种注解
  • spring实现ioc的四种方法,spring的ioc的三种实现方式
  • spring实现ioc的四种方法,spring的ioc的三种实现方式,简单实现Spring的IOC原理详解
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况,Spring事务失效问题分析及解决方案
  • spring5.0新特性,spring4新特性
  • spring5.0新特性,spring4新特性,spring5新特性全面介绍
  • spring ioc以及aop原理,springmvc aop原理
  • spring ioc以及aop原理,springmvc aop原理,深入浅析Spring 的aop实现原理
  • Spring cloud网关,spring cloud zuul作用
  • 留言与评论(共有 条评论)
       
    验证码: