Spring_Cloud自定义的LogBack记录日志

最近闲暇之余,想研究一下Spring Cloud的eureka的集群以及RBC调用,在本地测试调试,日志肯定少不了,所以就顺便把logback也自定义实现了一下,谁知遇到的坑还真不少;列出来作为记录并与广大有此需求的同胞共享与讨论;

1.引入的依赖:其实logback的依赖不用特意的添加,只需要添加

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

web依赖,自然就会有logback的依赖;
2.自定义创建日志文件:在使用的Intellij Idea编译器,创建logback.xml文件时,没有Scheme和DTD文档约束可以使用,优点是xml文件只需要满足基础的xml标签语法要求即可,但悲催的是都不知道定义那些标签以及写标签的时候提示都没有。经过我多次重启反复修改后,总结整个xml可以分成以下几个模块:
spring Cloud 默认的文件名是logback.xml,所以我们自定义的日志文件可以使用默认的,但最好定义成logback-xxxx.xml;
1>.xml头部,既然是xml文件,基础的字符集标签肯定少不了:

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

2>.logback 根标签:
在logBack中根标签是。此标签包含有三个属性:debug、scan、scanPeriod:
2.1>:debug:即是否打印出logback内部的日志信息,默认为false;
2.2>:scan:是否扫描配置文件,与spring boot 热部署结合使用,当配置文件更改时,会自动启动;
2.3>:scanPeriod:扫描配置文件是否有修改的时间间隔;该属性必须与scan属性结合使用,当scan属性为true时,会已自定义的时间扫描配置文件;默认为1分钟。
3>.自定义标签::
在该标签中可以集中定义一些变量的名字以及值,然后再其他的地方通过${}引用;该用法类似于pom文件中标签的用法;比如:我在使用时将日志文件的路基以及名称定义在文档的头部;以及控制台或者文件中日志输出的格式,都定义在该标签中;

//格式化输出:%d表示日期,%thread表示线程名,%-5level:级别 从左显示5个字符宽度  %msg:日志消息,%n是换行符
//<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<property name="CONSOLE_LOG_PATTERN"
          value="%d{yyyy-MM-dd HH:mm:ss.SSSS} - [thread:%thread] - [level:%-5level] - [%class : %method : %line] - %msg %n"/>
<property name="FILE_LOG_PATTERN"
          value="%d{yyyy-MM-dd HH:mm:ss.SSS} - [thread:%thread] - [level:%-5level] - [%class : %method : %line] - %msg %n"/>
//路径不能使用相对路径  路劲上的分隔符 windows 上和linux上不一样 
<property name="LOG_FILE_PATH" value="D:/Log/Test-Cluster-Master-Log.log"/>
<property name="APPENFER_NAME_CONSOLE" value="CONSOLE"/>
<property name="APPENDER_NAME_FILE" value="FILE"/>
<property name="SPRING_PROFILE_TESR" value="test"/>
<property name="ROOT_LOG_LEVEL" value="debug"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(以上定义的变量在下面都有使用)
4>.appender标签:该标签集中配置一种日志的格式;比如:控制台输出日志的配置,输出到日志文件中的日志的配置;
该标签包含有两个属性:
name 属性:用于定义此配置的名称,也方便其他地方的引用该名称(比如 与root标签同时使用时会引用这个name属性);
class属性:用于定义该appender标签引用的类:一般有 ConsoleAppender(用于控制台输出日志配置) 和 RollingFileAppender(用于文件中输出日志的配置)两个;
控制台输出日志的配置:

<appender name="${APPENFER_NAME_CONSOLE}" class="ch.qos.logback.core.ConsoleAppender">
 #输出到控制台的日志的 格式 以及 使用的 字符集
  <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>${CONSOLE_LOG_PATTERN}</pattern>
    <charset>UTF-8</charset>
  </encoder>
</appender>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

日志文件的配置:

<appender name="${APPENDER_NAME_FILE}" class="ch.qos.logback.core.rolling.RollingFileAppender">
 <!--<File>${LOG_FILE_PATH}</File>-->
  #日志文件 分隔保存的策略  基于 大小和日期的方式 分隔
  <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    #日志文件 输出的文件名的格式 以及归档的分隔方式
    #<FileNamePattern>${LOG_FILE_PATH}.%d{yyyy-MM-dd HH HH:mm:ss}.%i.log</FileNamePattern>有敏感符号 创建不成功
    <FileNamePattern>D:\Log\Test_Cluster_Master_Log-%d{yyyy-MM-dd}-%i.log</FileNamePattern>                                        <MaxHistory>1</MaxHistory> ----  日志文件保留的最大时长  只能是整数 
     <maxFileSize>1MB</maxFileSize> ------ 单个日志的最大容量 ,超出的话 会重新创建日志文件
     <totalSizeCap>2MB</totalSizeCap>----日志的总的大小
  </rollingPolicy>

   <encoder><!--class属性 可以省去-->
       <pattern>${FILE_LOG_PATTERN}</pattern>
       <charset>UTF-8</charset>
   </encoder>
</appender>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  # 以日期为基础 分隔日志文件
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      &lt;!&ndash;<FileNamePattern>${LOG_FILE_PATH}.%d{yyyy-MM-dd HH:mm:ss}.%i.log</FileNamePattern>&ndash;&gt;
      <FileNamePattern>D:\Log\Test_Cluster_Slave_Log-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
      <MaxHistory>1</MaxHistory>
  </rollingPolicy>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  # 按照大小的方式 分隔日志文件
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
       <maxFileSize>1MB</maxFileSize>
   </triggeringPolicy>
  • 1
  • 2
  • 3
  • 4

注意事项:
1 已上分隔日志保存的方式,尽量使用一种使用基于Size和Time就既可以根据时间来分隔又可以根据大小来分隔日志;
2 在windows上不要使用File标签, 否则下面定义的FileNamePattern不会起作用。如果使用的话,在控制台会有日志显示,修改名字失败的记录,因为在windows上先通过File标签创建了文件并定义了文件名,但是通过FIleNamePattern修改名字的时候,会因为文件被占用中而修改名称失败。
3 如果使用基于SizeAndTimeBasedRollingPolicy的方式分隔日志的话,需要使用%i的参数来生成同一个时间段内,由于大小的不同产生的多个日志文件的自增的数,比如:Test_log-1.log;Test_log-2.log; Test_log-3.log;…….;
4:在windows上日志文件的命名不能有多个。号,否则会报日志文件名错误之类的异常;尽量使用下划线分隔或者破折号分隔名字;

5>.root标签:整个xml文件中只能有一个此标签,用于定义appender的日志级别;
日志的级别从低到高依次是:Trace < debug < info < waen < error 五个级别;所以该标签会有一个 level属性用于定义记录的级别;

<root level="${ROOT_LOG_LEVEL}">
    <appender-ref ref="${APPENFER_NAME_CONSOLE}"/>
    <appender-ref ref="${APPENDER_NAME_FILE}"/>
</root>
  • 1
  • 2
  • 3
  • 4

文章的最后,附上本人这个项目的git地址——- 项目地址 ,如果需要获取详细的解释或者代码的可以clone;而且这个项目我最近也是自己在做,如果有什么好的建议欢迎留言

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值