版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mggwct/article/details/77718122

在业务逻辑较为多的系统中,为了能快速的排查线上的问题和清楚的查询各个业务的日志信息,往往需要对不同业务线的日志进行分开记录: 
比如现在系统中有对小金库用户发放奖励和白条用户进行发放奖励。

logback.xml配置文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  4. <encoder charset="UTF-8">
  5. <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
  6. <charset>UTF-8</charset>
  7. </encoder>
  8. </appender>
  9. <appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
  10. <File>${catalina.base}/program/info.log</File>
  11. <append>true</append>
  12. <!--过滤器,只打INFO级别的日志-->
  13. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  14. <level>INFO</level>
  15. <onMatch>ACCEPT</onMatch>
  16. <onMismatch>DENY</onMismatch>
  17. </filter>
  18. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  19. <fileNamePattern>${catalina.base}/program/info.log.%d</fileNamePattern>
  20. <maxHistory>30</maxHistory>
  21. </rollingPolicy>
  22. <encoder charset="UTF-8">
  23. <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
  24. <charset>UTF-8</charset>
  25. </encoder>
  26. </appender>
  27. <appender name="SYS_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
  28. <File>${catalina.base}/program/error.log</File>
  29. <append>true</append>
  30. <!--过滤器,只打ERROR级别的日志-->
  31. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  32. <level>ERROR</level>
  33. <onMatch>ACCEPT</onMatch>
  34. <onMismatch>DENY</onMismatch>
  35. </filter>
  36. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  37. <fileNamePattern>${catalina.base}/program/error.log.%d</fileNamePattern>
  38. <maxHistory>12</maxHistory>
  39. </rollingPolicy>
  40. <encoder charset="UTF-8">
  41. <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
  42. <charset>UTF-8</charset>
  43. </encoder>
  44. </appender>
  45. <!--不同业务逻辑的日志打印到不同文件-->
  46. <appender name="baitiaoUserAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
  47. <File>${catalina.base}/program/bt.log</File>
  48. <append>true</append>
  49. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  50. <level>INFO</level>
  51. <onMatch>ACCEPT</onMatch>
  52. <onMismatch>DENY</onMismatch>
  53. </filter>
  54. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  55. <fileNamePattern>${catalina.base}/program/bt.log.%d</fileNamePattern>
  56. <maxHistory>12</maxHistory>
  57. </rollingPolicy>
  58. <encoder charset="UTF-8">
  59. <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
  60. <charset>UTF-8</charset>
  61. </encoder>
  62. </appender>
  63. <appender name="xjkUserAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
  64. <File>${catalina.base}/program/xjk.log</File>
  65. <append>true</append>
  66. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  67. <level>INFO</level>
  68. <onMatch>ACCEPT</onMatch>
  69. <onMismatch>DENY</onMismatch>
  70. </filter>
  71. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  72. <fileNamePattern>${catalina.base}/program/xjk.log.%d</fileNamePattern>
  73. <maxHistory>12</maxHistory>
  74. </rollingPolicy>
  75. <encoder charset="UTF-8">
  76. <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
  77. <charset>UTF-8</charset>
  78. </encoder>
  79. </appender>
  80. <!-- 不同的业务逻辑日志打印到指定文件夹-->
  81. <logger name="baitiaoUser" additivity="false" level="INFO">
  82. <appender-ref ref="baitiaoUserAppender"/>
  83. </logger>
  84. <logger name="xjkUser" additivity="false" level="INFO">
  85. <appender-ref ref="xjkUserAppender"/>
  86. </logger>
  87. <logger name="com.act.award" level="INFO"/>
  88. <logger name="com.act.award" level="DEBUG"/>
  89. <!--info和error分开打印-->
  90. <root level="INFO">
  91. <appender-ref ref="CONSOLE"/>
  92. <appender-ref ref="SYS_INFO"/>
  93. <appender-ref ref="SYS_ERROR"/>
  94. </root>
  95. </configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106

代码:

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @ContextConfiguration("classpath:/spring/application.xml")
  3. public class MainTest {
  4. Logger XJK_USER_LOG = LoggerUtils.Logger(LogFileName.XJK_USER);
  5. Logger BAITIAO_USER_LOG = LoggerUtils.Logger(LogFileName.BAITIAO_USER);
  6. @Test
  7. public void testGetBusinessAccount() throws Exception {
  8. XJK_USER_LOG.info("小金库用户进来了...");
  9. BAITIAO_USER_LOG.info("白条用户进来了...");
  10. }
  11. }
  12. public enum LogFileName {
  13. //配置到logback.xml中的logger name="vipUser"
  14. XJK_USER("xjkUser"),
  15. BAITIAO_USER("baitiaoUser");
  16. private String logFileName;
  17. LogFileName(String fileName) {
  18. this.logFileName = fileName;
  19. }
  20. public String getLogFileName() {
  21. return logFileName;
  22. }
  23. public void setLogFileName(String logFileName) {
  24. this.logFileName = logFileName;
  25. }
  26. public static LogFileName getAwardTypeEnum(String value) {
  27. LogFileName[] arr = values();
  28. for (LogFileName item : arr) {
  29. if (null != item && StringUtils.isNotBlank(item.logFileName)) {
  30. return item;
  31. }
  32. }
  33. return null;
  34. }
  35. }
  36. public class LoggerUtils {
  37. public static <T> Logger Logger(Class<T> clazz) {
  38. return LoggerFactory.getLogger(clazz);
  39. }
  40. /**
  41. * 打印到指定的文件下
  42. *
  43. * @param desc 日志文件名称
  44. * @return
  45. */
  46. public static Logger Logger(LogFileName desc) {
  47. return LoggerFactory.getLogger(desc.getLogFileName());
  48. }
  49. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

日志文件形式:

 
bt.log内容: 
INFO [main] MainTest.java:23 - 白条用户进来了… 
xjk.log内容: 
INFO [main] MainTest.java:22 - 小金库用户进来了…

logback不同业务的日志打印到不同文件的更多相关文章

  1. SpringBoot+logback实现按业务输出日志到不同的文件

        公司有个项目,需要和几个第三方系统对接.这种项目,日志一定要记录详细,不然出了问题就是各种甩锅.虽然项目里面和第三方系统对接相关的业务记录的日志很详细,但是由于整个项目的日志都在一个文件中,排 ...

  2. springboot2整合logback.xml动态修改日志打印级别

    今天找bug烦到了,生产上的日志级别不能修改,非常不利于排查问题,于是想到了动态修改日志打印级别, 因为上一周把项目升级成springboot2,并且使用logback.xml管理日志打印,所以修改也 ...

  3. logback.xml设置mogodb日志打印控制台

    <logger name="org.springframework.data.mongodb.core" level="DEBUG"/>

  4. ios 将Log日志重定向输出到文件中保存

    对于真机,日志没法保存,不好分析问题.所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析. 首先是日志输出,分为c的printf和标准的NSLog输出,print ...

  5. SpringBoot+logback实现日志打印

    logback介绍 logback是一款开源的日志框架,内核重写了,是基于log4j基础进行改良的.其官网为logback.qos.ch.logback在性能上有很大提升,拥有更多特性. logbac ...

  6. 涨姿势:Java 分业务、分级别实现自定义日志打印

    自定义日志级别 通常的日志框架都有以下几个级别,从低到高TRACE,DEBUG,INFO,WARN,ERROR,FATAL. 默认情况,假如我们定义日志打印级别INFO,它会把大于等于INFO级别的日 ...

  7. SpringBoot系列之集成logback实现日志打印(篇二)

    SpringBoot系列之集成logback实现日志打印(篇二) 基于上篇博客SpringBoot系列之集成logback实现日志打印(篇一)之后,再写一篇博客进行补充 logback是一款开源的日志 ...

  8. logback日志打印sql

    今天整合springboot2 + mybatis + logback 遇到了在日志中sql打印不出来的坑,在网上找了好久,都不是我遇到的问题,这里吐槽一下下现在的博客质量,好多都是抄袭的,也没有标注 ...

  9. Springboot集成logback,控制台日志打印两次,并且是不同的线程打印的

    背景 在搭建一个新项目的时候,从公司别的项目搞了个logback-spring.xml的配置过来,修改一下启动项目的时候发现 所有的日志都输出了两次 并且来自于不同的线程,猜测是配置重复了,但是仔细检 ...

随机推荐

  1. Spring Boot 中的事务管理

    希望能在发生异常的时候被回退,这时候就可以使用事务让它实现回退,做法非常简单,我们只需要在test函数上添加@Transactional注解即可. 使用@Transactional注解来声明一个函数需 ...

  2. 题解 LA2911

    题目大意 多组数据,每组数据给定整数 \(m,p,a,b\),满足 \(a>0\),\(2\leq p\leq12\) 且 \(p\) 为偶数.要求求出一列数 \(x_1,x_2,\cdots, ...

  3. swift语法之常量 变量 类型

    常量和变量: 在swift中声明变量或者声明常量的时候可以不用写变量或者常量类型 因为系统会自动推导出对应的类型. 变量:可以更改值 swift中每句代码后面不需要加 ; 号 var num = 5 ...

  4. LeetCode 1110. Delete Nodes And Return Forest

    原题链接在这里:https://leetcode.com/problems/delete-nodes-and-return-forest/ 题目: Given the root of a binary ...

  5. luogu_4568: 飞行路线

    洛谷4568: 飞行路线 题意: 给定一张无向图有\(n\)个点编号为\(0\)到\(n-1\).共有\(m\)条边,每条边有一个边权. 可以选择\(k\)条边将边权改变为\(0\),给定起点和终点, ...

  6. ent 基本使用十一 sql.DB 集成

    这个功能是github中大家提的比较多的一个,所以官方也暴露了相关的api 配置sql.DB 一种方式 package main ​ import ( "time" ​ " ...

  7. 如何在你的springboot(cloud)项目中引入我的github上的jar仓库呢?

    1. 将此标签内容放到pom.xml仅次于project标签下 <repositories> <repository> <id>github</id> ...

  8. share memory between guest and nic

    通过硬件的IOMMU,内核提供的共享内存.VFIO可以实现. REF: 1. offical DPDK API Doc, 简书有翻译版 DPDK编程指南(翻译)(一)  (二十七) 2. dpdk v ...

  9. Android编程权威指南笔记2:解决R文件爆红问题和SDK概念

    在android studio中会遇到R文件的丢失,所以遇见这问题怎么解决呢? 重新检查资源文件中xml文件 最近一次编译时如果未生成R.java文件,项目中资源引用的地方都会出错.通常,这是某个xm ...

  10. 冰多多团队-第七次scrum例会

    冰多多团队-第七次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj 接入IAT模块 debug, IAT 牛雅哲 调研科大讯飞SDK中其他模块,寻找符合我们的需求的部分,将接口更换成 ...