logback节点配置详解

Love The Way You Lie 2022-01-21 08:11 323阅读 0赞

一 :根节点

属性 :

debug : 默认为false ,设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。

scan : 配置文件如果发生改变,将会重新加载,默认值为true;

scanPeriod : 检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位时毫秒,当scan为true时,这个属性生效,默认时间间隔为1min。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. 1 <configuration debug="true" scan="true" scanPeriod="2">
  3. 2 <!--TODO : 子节点信息-->
  4. 3 </configuration>

可以这样描述配置文件的基本结构:以开头,后面有零
个或多个元素,有零个或多个元素,有最多一个元素

658616-20160712172254264-1328587107.png

二: 子节点

1 :

2 :

3 :

1.1 的子节点,是负责写日志的组件。

658616-20160712135630904-289482889.png

appender 有两个必要属性 name ,class 。name指定appender 的名称, class 指定appender的全限定名

class 包括 :ch.qos.logback.core.ConsoleAppender / ch.qos.logback.core.FileAppender/ ch.qos.logback.core.RollingFileAppender

复制代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. 1 <configuration debug="true" scan="true" scanPeriod="2">
  3. 2 <!-- conf consoel out -->
  4. 3 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
  5. 4 </appender>
  6. 5
  7. 6 <!-- conf file out -->
  8. 7 <appender name="file_out" class="ch.qos.logback.core.FileAppender">
  9. 8 </appender>
  10. 9
  11. 10 <!-- conf file out -->
  12. 11 <appender name="file_out" class="ch.qos.logback.core.RollingFileAppender">
  13. 12 </appender>
  14. 13
  15. 14 <root></root>
  16. 15 <loger></loger>
  17. 16 </configuration>

复制代码

1.1.1 :ConsoleAppender

把日志添加到控制台,有如下节点:

: 对日志进行格式化。

: 字符串System.out 或者 System.err, 默认 System.out;

复制代码

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <configuration>
  3. 3 <!-- conf consoel out -->
  4. 4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
  5. 5 <encoder>
  6. 6 <pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
  7. 7 </encoder>
  8. 8 </appender>
  9. 9
  10. 10 <root level="INFO">
  11. 11 <appender-ref ref="console_out" />
  12. 12 </root>
  13. 13 </configuration>

复制代码

1.1.2 : FileAppender

把日志添加到文件,有如下节点:

: 被写入的文件名,可以是相对目录 , 也可以是绝对目录 , 如果目录不存在则会自动创建

: 如果是true , 日志被追加到文件结尾 , 如果是false,清空现存文件 , 默认是true

: 对日志进行格式化 [具体的转换符说明请参见官网.]

: 如果是true,日志会被安全的写入文件 , 即使其他的FileAppender也会向此文件做写入操作 , 默认是false

复制代码

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <configuration>
  3. 3 <!-- conf consoel out -->
  4. 4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
  5. 5 <encoder>
  6. 6 <pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
  7. 7 </encoder>
  8. 8 </appender>
  9. 9
  10. 10 <!-- conf file out -->
  11. 11 <appender name="file_out" class="ch.qos.logback.core.FileAppender">
  12. 12 <file>logs/debug.log</file>
  13. 13 <encoder>
  14. 14 <pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
  15. 15 </encoder>
  16. 16 </appender>
  17. 17 </configuration>

复制代码

1.1.3 : **RollingFileAppender [常用]**

滚动纪录文件,先将日志记录到指定文件,当符合某种条件时,将日志记录到其他文件,有如下节点:

: 被写入的文件名,可以是相对目录,也可以解决目录,如果目录不存在则自动创建。

: 如果是true,日志被追加到文件结尾,如果是false,清空现存文件,默认是true;

: 对日志进行格式化 [具体的转换符说明请参见官网.]

: 当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。

  • 1.1.3.1 :

    TimeBaseRollingPolicy :最常用的滚动策略,根据时间来制定滚动策略,即负责滚动也负责触发滚动。有如下节点;

    1) :

    必要节点,包含文件及“%d” 转换符,“%d”可以包含一个java.text.SimpleDateFormat 制定的时间格式,如:%d{yyyy-MM},如果直接使用 %d ,默认格式是 yyyy-MM-dd。

    RollingFileAppender 的file 子节点可有可无,通过设置file,可以为活动文件和归档文件制定不同位置,当前日志总是纪录到file指定的文件,活动文件的名称不会改变,如果没有设置file,活 动文件 的名称会根据fileNamePattern的值,每隔一段时间改变一次,“/”或者“\” 会被当作目录分隔符。

    2) :

    可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,且 是 6,则只保存最近6个月的文件,删除之前的旧文件,注意:删除旧文件是哪些为了归档而创建的目录也会被删除。

    3) :

    必须包含“%i” 例如:设置最小值,和最大值分别为1和2,命名模式为 log%i.log,会产生归档文件log1.log和log2.log,还可以指定文件压缩选项,例如:log%i.log.gz 或者 log%i.log.zip

    4) : :

    告知RollingFileAppender 激活RollingFileAppender滚动

复制代码

  1. 1 <!-- 03:conf errorAppender out -->
  2. 2 <appender name="errorAppender" class="ch.qos.logback.core.RollingFileAppender">
  3. 3 <file>logs/error.log</file>
  4. 4 <!-- 设置滚动策略 -->
  5. 5 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  6. 6 <!--设置日志命名模式-->
  7. 7 <fileNamePattern>errorFile.%d{yyyy-MM-dd}.log</fileNamePattern>
  8. 8 <!--最多保留30log-->
  9. 9 <maxHistory>30</maxHistory>
  10. 10 </rollingPolicy>
  11. 11 <!-- 超过150MB时,触发滚动策略 -->
  12. 12 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  13. 13 <maxFileSize>150</maxFileSize>
  14. 14 </triggeringPolicy>
  15. 15 <encoder>
  16. 16 <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
  17. 17 </encoder>
  18. 18 </appender>

复制代码

  • 1.1.3.2 :

    SizeBasedTriggeringPolicy : 查看当前活动文件的大小 , 如果超过指定大小会告知 RollingFileAppender , 触发当前活动滚动 , 只有一个节点 , 用来规定文件大小

    : 活动文件的大小 , 默认10MB

    :当为true时 , 不支持FixedWindowRollingPolicy , 支持TimeBasedRollingPolicy , 但是有两个限制 , 1不支持也不允许文件压缩 , 2不能设置file属性 . 必须留空

至此 , Appender 节点已经介绍完毕.

2.1 : logger 节点

logger 是 的子节点

来设置某一个包或者具体的某一个类的日志打印级别,以及指定, logger 仅有一个name属性,两个可选属性 level/addtivity

name : 用来指定受此loger约束的某一个包或者具体的某一个类

level:用来设置打印级别,大小写无关,TRACE,DEBUG,INFO,WARE,ERROR,ALL和OFF,还有一个特俗值INHERITED 或者 同义词NULL,代表强制执行上级的级别。

  1. 如果未设置此属性,那么当前logger将会继承上级的级别。
  2. level 大小
  3. ERROR > WARN > INFO > DEBUG > TRACE
  4. 程序会打印高于或等于所设置级别的日志

addtivity : 是否向上级loger传递打印信息,默认为true;

可以包含零个或多个元素,表示这个appender将会添加到loger

ExpandedBlockStart.gif

复制代码

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <configuration>
  3. 3 <!-- conf consoel out -->
  4. 4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
  5. 5 <filter class="ch.qos.logback.classic.filter.LevelFilter">
  6. 6 <!-- 过滤掉非INFO级别 -->
  7. 7 <level>INFO</level>
  8. 8 <onMatch>ACCEPT</onMatch>
  9. 9 <onMismatch>DENY</onMismatch>
  10. 10 </filter>
  11. 11 </appender>
  12. 12
  13. 13 <!-- conf infoAppender out -->
  14. 14 <appender name="infoAppender" class="ch.qos.logback.core.RollingFileAppender">
  15. 15
  16. 16 <file>logs/info.log</file>
  17. 17 <!-- 设置滚动策略 -->
  18. 18 <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  19. 19 <!--设置日志命名模式-->
  20. 20 <fileNamePattern>infoFile.%d{yyyy-MM-dd}.log</fileNamePattern>
  21. 21 <!--最多保留30log-->
  22. 22 <maxHistory>30</maxHistory>
  23. 23 </rollingPoliy>
  24. 24 <!-- 超过150MB时,触发滚动策略 -->
  25. 25 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  26. 26 <maxFileSize>150</maxFileSize>
  27. 27 </triggeringPolicy>
  28. 28 <encoder>
  29. 29 <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
  30. 30 </encoder>
  31. 31 </appender>
  32. 32
  33. 33 <!-- 指定在logback.olf.log包中的log -->
  34. 34 <logger name="logback.olf.log" level="info">
  35. 35 <appender-ref ref = "console_out"/>
  36. 36 <appender-ref ref = "infoAppender"/>
  37. 37 </logger>
  38. 38 </configuration>

复制代码

2.2 : root 节点

元素配置根 logger。该元素有一个 level 属性。没有 name 属性,因为已经被命名 为“root”

Level 属性的值大小写无关,其值为下面其中一个字符串:TRACE、DEBUG、INFO、 WARN、ERROR、ALL 和 OFF。注意不能设置为“INHERITED” 或“NULL”。 元素可以包含零个或多个元素。与元素类似,声明 元素后,会先关闭然后移除全部当前 appender,只引用声明了的 appender。如果 root 元素没 有引用任何 appender,就会失去所有 appender。

如下完整案例配置 :

ExpandedBlockStart.gif

复制代码

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <configuration>
  3. 3 <!-- conf consoel out -->
  4. 4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
  5. 5 <filter class="ch.qos.logback.classic.filter.LevelFilter">
  6. 6 <!-- 过滤掉非INFO级别 -->
  7. 7 <level>INFO</level>
  8. 8 <onMatch>ACCEPT</onMatch>
  9. 9 <onMismatch>DENY</onMismatch>
  10. 10 </filter>
  11. 11 </appender>
  12. 12
  13. 13 <!-- 01:conf infoAppender out -->
  14. 14 <appender name="infoAppender" class="ch.qos.logback.core.RollingFileAppender">
  15. 15
  16. 16 <file>logs/info.log</file>
  17. 17 <!-- 设置滚动策略 -->
  18. 18 <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  19. 19 <!--设置日志命名模式-->
  20. 20 <fileNamePattern>infoFile.%d{yyyy-MM-dd}.log</fileNamePattern>
  21. 21 <!--最多保留30log-->
  22. 22 <maxHistory>30</maxHistory>
  23. 23 </rollingPoliy>
  24. 24 <!-- 超过150MB时,触发滚动策略 -->
  25. 25 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  26. 26 <maxFileSize>150</maxFileSize>
  27. 27 </triggeringPolicy>
  28. 28 <encoder>
  29. 29 <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
  30. 30 </encoder>
  31. 31 </appender>
  32. 32
  33. 33 <!-- 02:conf debugAppender out -->
  34. 34 <appender name="debugAppender" class="ch.qos.logback.core.RollingFileAppender">
  35. 35 <file>logs/debug.log</file>
  36. 36 <!-- 设置滚动策略 -->
  37. 37 <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  38. 38 <!--设置日志命名模式-->
  39. 39 <fileNamePattern>debugFile.%d{yyyy-MM-dd}.log</fileNamePattern>
  40. 40 <!--最多保留30log-->
  41. 41 <maxHistory>30</maxHistory>
  42. 42 </rollingPoliy>
  43. 43 <!-- 超过150MB时,触发滚动策略 -->
  44. 44 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  45. 45 <maxFileSize>150</maxFileSize>
  46. 46 </triggeringPolicy>
  47. 47 <encoder>
  48. 48 <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
  49. 49 </encoder>
  50. 50 </appender>
  51. 51
  52. 52 <!-- 03:conf errorAppender out -->
  53. 53 <appender name="errorAppender" class="ch.qos.logback.core.RollingFileAppender">
  54. 54 <file>logs/error.log</file>
  55. 55 <!-- 设置滚动策略 -->
  56. 56 <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  57. 57 <!--设置日志命名模式-->
  58. 58 <fileNamePattern>errorFile.%d{yyyy-MM-dd}.log</fileNamePattern>
  59. 59 <!--最多保留30log-->
  60. 60 <maxHistory>30</maxHistory>
  61. 61 </rollingPoliy>
  62. 62 <!-- 超过150MB时,触发滚动策略 -->
  63. 63 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  64. 64 <maxFileSize>150</maxFileSize>
  65. 65 </triggeringPolicy>
  66. 66 <encoder>
  67. 67 <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
  68. 68 </encoder>
  69. 69 </appender>
  70. 70
  71. 71 <root level="ALL">
  72. 72 <appender-ref ref="infoAppender"/>
  73. 73 <appender-ref ref="debugAppender"/>
  74. 74 <appender-ref ref="errorAppender"/>
  75. 75 </root>
  76. 76 </configuration>

复制代码

三 : 过滤节点

Logback 的过滤器基于三值逻辑(ternary logic),允许把它们组装或成链,从而组成任 意的复合过滤策略。

这里的所谓三值逻辑是说,过滤器的返回值只能是 ACCEPT、DENY 和 NEUTRAL 的其中一个。

过滤器一般分为如下几类 :

3.1 : 级别过滤器(LevelFilter)

LevelFilter 根据记录级别对记录事件进行过滤。如果事件的级别等于配置的级别,过滤 器会根据 onMatch 和 onMismatch 属性接受或拒绝事件。下面是个配置文件例子:

复制代码

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <configuration>
  3. 3 <!-- conf consoel out -->
  4. 4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
  5. 5 <filter class="ch.qos.logback.classic.filter.LevelFilter">
  6. 6 <!-- 过滤掉非INFO级别 -->
  7. 7 <level>INFO</level>
  8. 8 <onMatch>ACCEPT</onMatch>
  9. 9 <onMismatch>DENY</onMismatch>
  10. 10 </filter>
  11. 11
  12. 12 <encoder>
  13. 13 <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
  14. 14 </encoder>
  15. 15 </appender>
  16. 16 <root level="DEBUG">
  17. 17 <appender-ref ref="console_out" />
  18. 18 </root>
  19. 19 </configuration>

复制代码

3.2 : 临界值过滤器(ThresholdFilter)

ThresholdFilter 过滤掉低于指定临界值的事件 . 当记录的级别等于或高于临界值时 , ThresholdFilter 的decide()方法会返回NEUTRAL ; 当记录级别低于临界值时 , 事件会被拒绝 下面是个配置文件例子 :

复制代码

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <configuration>
  3. 3 <!-- conf consoel out -->
  4. 4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
  5. 5 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  6.         <!-- 过滤掉TRACEDEBUG级别的日志 -->
  7. 6 <level>INFO</level>
  8. 7 </filter>
  9. 8
  10. 9 <encoder>
  11. 10 <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
  12. 11 </encoder>
  13. 12 </appender>
  14. 13 <root level="DEBUG">
  15. 14 <appender-ref ref="console_out" />
  16. 15 </root>
  17. 16 </configuration>

复制代码

3.3 : 求值过滤器(EvaluatorFilter)

EvaluatorFilter 封装了 EventEvaluator(ch.qos.logback.core.boolex.EventEvaluator) , 评估 是否符合指定的条件

复制代码

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <configuration>
  3. 3 <!-- conf consoel out -->
  4. 4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
  5. 5 <filter class="ch.qos.logback.classic.filter.EvaluatorFilter">
  6. 6 <evaluator>
  7. 7 <!--过滤掉所有日志中不包含hello字符的日志-->
  8. 8 <expression>
  9. 9 message.contains("hello")
  10. 10 </expression>
  11. 11 <onMatch>NEUTRAL</onMatch>
  12. 12 <onMismatch>DENY</onMismatch>
  13. 13 </evaluator>
  14. 14 </filter>
  15. 15
  16. 16 <encoder>
  17. 17 <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
  18. 18 </encoder>
  19. 19 </appender>
  20. 20 <root level="DEBUG">
  21. 21 <appender-ref ref="console_out" />
  22. 22 </root>
  23. 23 </configuration>

复制代码

3.4 : 匹配器(Matchers)

尽管能通过调用 String 类的 matches()方法进行模式匹配,但这会导致每次调用过滤器 时都会创建一个全新的 Pattern 对象。为消除这种开销,你可以预先定义一个或多个 Matcher 对象。一旦定义 matcher 后,就可以在求值表达式里重复引用它。

复制代码

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <configuration>
  3. 3 <!-- conf consoel out -->
  4. 4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
  5. 5 <filter class="ch.qos.logback.classic.filter.EvaluatorFilter">
  6. 6 <evaluator>
  7. 7 <matcher>
  8. 8 <Name>odd</Name>
  9. 9 <!-- 过滤掉序号为奇数的语句-->
  10. 10 <regex>statement [13579]</regex>
  11. 11 </matcher>
  12. 12 <expression>odd.matches(formattedMessage)</expression>
  13. 13 <onMatch>NEUTRAL</onMatch>
  14. 14 <onMismatch>DENY</onMismatch>
  15. 15 </evaluator>
  16. 16 </filter>
  17. 17
  18. 18 <encoder>
  19. 19 <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
  20. 20 </encoder>
  21. 21 </appender>
  22. 22 <root level="DEBUG">
  23. 23 <appender-ref ref="console_out" />
  24. 24 </root>
  25. 25 </configuration>

复制代码

logback 执行流程 :

1 : 获得过滤链的策略

依据过滤器链返回的结果做出不同的响应。共有三个响应结果:
FilterReply.DENY, 直接退出,不执行后续流程
FilterReply.NEUTRA,继续向下执行
FilterReply.ACCEPT,不进行步骤二,即类型输出类型检查

2 : 执行基本的选择规则

主要是比较下level,如果级别低直接退出后续执行

3 : 创建LoggingEvent对象

这个对象包裹一些基本信息,包括日志界别,信息本身,可能的异常信息,执行时间,执行线程,其实一些随日志请求一起发出的数据和MDC。其中MDC是用来装一些额外的上下文信息的。

4 : 调用appenders

此时logback会调用appender的doAppender,如果appender里有一些filer的话,此时也会调用

5 : 格式化输出结果

通常情况下都是由layout层将event格式化成String型。当然也有意外比如说SocketAppender就是将event格式化成流。

6 : .输出LoggingEvent

将格式化好的结果,输出到appender中记录的地址

658616-20160712182917217-185590552.png

注 : 标准logback .xml 配置 详见楼主另一篇博文

http://www.cnblogs.com/DeepLearing/p/5664941.html

可用于纪录多文件。

作者:刘彬

出处:http://www.cnblogs.com/Albin/

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

发表评论

表情:
评论列表 (有 0 条评论,323人围观)

还没有评论,来说两句吧...

相关阅读

    相关 logback配置详解

    一:根节点包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 scanPeriod: 设置监测配置文件是否有修

    相关 logback 配置详解

    概览 简单地说,Logback 是一个 Java 领域的日志框架。它被认为是 Log4J 的继承人。 Logback 主要由三个模块组成: logback-c