专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Logback配置

首先,看一段真实的配置

 <?xml version="1.0" encoding="UTF-8"?>
 <configuration debug="true">
     <springProperty scope="context" name="logLevel" source="log.level"/>
     <springProperty scope="context" name="logPath" source="log.path"/>

     <!-- 输出格式 -->
     <property name="out.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] [%t] [%c][%L] - %m%n" />
     <!-- 活动文件的大小 -->
     <property name="max.file.size" value="500MB"/>
     <!-- 保留的归档文件的最大数量 -->
     <property name="max.history" value="30"/>
     <!-- 控制所有归档日志文件的总大小 -->
     <property name="total.size.cap" value="30GB"/>

     <!-- 控制台 -->
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
         <withJansi>true</withJansi>
         <encoder>
             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%highlight(%-5p)] [%t] [%cyan(%c)][%L] - %m%n</pattern>
         </encoder>
     </appender>

     <!-- DEBUG日志 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${logPath}/debug.log</file>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
             <onMatch>ACCEPT</onMatch>
             <onMismatch>DENY</onMismatch>
         </filter>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
             <fileNamePattern>${logPath}/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
             <maxFileSize>${max.file.size}</maxFileSize>
             <maxHistory>${max.history}</maxHistory>
             <totalSizeCap>${total.size.cap}</totalSizeCap>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${out.pattern}</pattern>
             <charset>UTF-8</charset>
         </encoder>
     </appender>

     <!-- INFO日志 -->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${logPath}/info.log</file>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
             <onMatch>ACCEPT</onMatch>
             <onMismatch>DENY</onMismatch>
         </filter>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
             <fileNamePattern>${logPath}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
             <maxFileSize>${max.file.size}</maxFileSize>
             <maxHistory>${max.history}</maxHistory>
             <totalSizeCap>${total.size.cap}</totalSizeCap>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${out.pattern}</pattern>
             <charset>UTF-8</charset>
         </encoder>
     </appender>

     <!-- ERROR日志 -->
     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${logPath}/error.log</file>
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
             <level>ERROR</level>
         </filter>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
             <fileNamePattern>${logPath}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
             <maxFileSize>${max.file.size}</maxFileSize>
             <maxHistory>${max.history}</maxHistory>
             <totalSizeCap>${total.size.cap}</totalSizeCap>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${out.pattern}</pattern>
             <charset>UTF-8</charset>
         </encoder>
     </appender>

     <!-- logger命中中包含Mapper的单独输出到一个文件 -->
     <appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${logPath}/sql.log</file>
         <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
             <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
                 <expression>logger.contains("Mapper")</expression>
             </evaluator>
             <onMatch>ACCEPT</onMatch>
             <onMismatch>DENY</onMismatch>
         </filter>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
             <fileNamePattern>${logPath}/sql.%d{yyyy-MM-dd}.log</fileNamePattern>
             <maxHistory>${max.history}</maxHistory>
             <totalSizeCap>${total.size.cap}</totalSizeCap>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${out.pattern}</pattern>
         </encoder>
     </appender>

     <appender name="OTHER_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>logFile.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
             <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
             <maxHistory>${max.history}</maxHistory>
             <totalSizeCap>${total.size.cap}</totalSizeCap>
         </rollingPolicy>
         <encoder>
             <pattern>${out.pattern}</pattern>
         </encoder>
     </appender>

     <!-- com.ourhours.coupon.service包下的日志都输出到单独一个文件 -->
     <logger name="com.ourhours.coupon.service" level="INFO">
         <appender-ref ref="OTHER_FILE" />
     </logger>

     <root level="${logLevel}">
         <appender-ref ref="STDOUT" />
         <appender-ref ref="DEBUG_FILE" />
         <appender-ref ref="INFO_FILE" />
         <appender-ref ref="ERROR_FILE" />
         <appender-ref ref="SQL_FILE" />
     </root>

 </configuration>

1、 Appender

1.1. ConsoleAppender

输出到控制台

1.2. FileAppender

输出到文件

43_1.png

1.3. RollingFileAppender

RollingFileAppender继承自FileAppender,并有滚动日志文件的能力。

RollingFileAppender有两个重要的组件。第一个组件是RollingPolicy,它决定怎样滚动;第二个组件是TriggeringPolicy,它决定什么时候执行滚动。

从字面上也很好理解,触发策略决定什么时候发生滚动,而滚动策略则定义当滚动发生的时候做什么。因此,RollingPolicy就是what,TriggeringPolicy就是when。

Thus, RollingPolicy is responsible for the what and TriggeringPolicy is responsible for the when.

RollingPolicy

TimeBasedRollingPolicy

TimeBasedRollingPolicy是最受欢迎的rolling策略。它是基于时间的,例如:按天或者按月。

43_2.png

Size and time based rolling policy

有时候你可能希望按天归档文件,与此同时还想限制每个日志文件的大小。为了达到这个目的,可以使用SizeAndTimeBasedRollingPolicy

注意,TimeBasedRollingPolicy已经运行你限制总的日志文件大小。通过设置totalSizeCap。

43_3.png

Both the %i and %d tokens are mandatory.

注意,%i和%d是强制的。每次当前日志达到maxFileSize时将被归档,并且带一个自增的从0开始的index。

SizeBasedTriggeringPolicy

SizeBasedTriggeringPolicy只接受一个参数,参数的名字是maxFileSize,它的默认值是10MB。

SizeBasedTriggeringPolicy accepts only one parameter, namely maxFileSize, with a default value of 10 MB.

maxFileSize的单位可以是字节,KB,MB,GB

例如:5000000,5000KB,5MB,2GB这些都是有效的值,而且它们等价的。

43_4.png

2、 Filter

Filter有三种回复,分别是ACCEPT(接受)、NEUTRAL(不接受也不拒绝)、DENY(拒绝)。

43_5.png

2.1. LevelFilter

LevelFilter是基于事件的级别来过滤的,如果事件的级别与配置的级别相等,接受或者拒绝这个事件取决于onMatch和onMismatch配置。

43_6.png

2.2. ThresholdFilter

ThresholdFilter过滤器是基于threshold(阈值)过滤的。对于级别等于或者高于threshold的事件,当它的decide()方法被调用的时候ThresholdFilter过滤器将回复NEUTRAL。

级别低于threshold的事件将被拒绝。

43_7.png

2.3. EvaluatorFilter

EvaluatorFilter是EventEvaluator的一个封装。EventEvaluator会计算给定的事件是否满足指定的条件。

通过指定onMatch和onMismatch属性,EvaluatorFilter将返回匹配还是不匹配。

注意,EventEvaluator是一个抽象类,你可以实现自己的逻辑。

JaninoEventEvaluator

JaninoEventEvaluator是EventEvaluator的一个具体实现。

JaninoEventEvaluator用任意的Java代码块返回的一个boolean值作为条件计算的结果。我们把这种Java语音的boolean表达式称之为“计算表达式”。计算表达式在计算过程中非常灵活。

JaninoEventEvaluator需要Janino库。因此,为了使用JaninoEventEvaluator。我们需要引入一个jar包。

43_8.png

JaninoEventEvaluator taking an arbitrary Java language block returning a boolean value as the evaluation criteria.

We refer to such Java language boolean expressions as “evaluation expressions”.

Evaluation expressions enable great flexibility in event filtering.

JaninoEventEvaluator requires the Janino library.

计算表达式在当前的日志事件中被计算。为了能够在计算表达式中访问当前事件的属性,Logback-classic自动将日志事件的各种字段导出并作为变量以供计算表达式使用。

43_9.png

43_10.png

上面的计算表达式return message.contains("billing");返回一个boolean值。并且,给定的onMathch为DENY,onMismatch为NEUTRAL,那么这个过滤器会丢弃所有message中包含billing的事件。

我发现,向上面这种貌似不用写return也可以,就像下面这样:

43_11.png

计算表达式可以是Java代码块。例如,下面是一个有效的表达式:

43_12.png

3、 Layout

43_13.png

3.1. 颜色

PatternLayout识别以下颜色:

“%black”, “%red”, “%green”,”%yellow”,”%blue”, “%magenta”,”%cyan”, “%white”, “%gray”, “%boldRed”,

“%boldGreen”, “%boldYellow”, “%boldBlue”, “%boldMagenta””%boldCyan”, “%boldWhite”,”%highlight”

43_14.png

输出效果如下

43_15.png

参考

https://logback.qos.ch/manual/layouts.html

https://logback.qos.ch/manual/appenders.html

https://logback.qos.ch/manual/filters.html

文章永久链接:https://tech.souyunku.com/21630

未经允许不得转载:搜云库技术团队 » Logback配置

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们