logback配置文件详解

1、说明

logback日志框架由三部分组成:logback-corelogback-accesslogback-classic。使用起来也很方便需要在项目目录下增加logback.xml文件。在springboot项目,框架已经集成了logback(默认的日志框架),只需要在项目resource下配置logback.xml文件或者logback-spring.xml文件。这里主要记录的是logback配置文件的内容部分。

2、logback. xml文件

在学习logback时,我们需要了解设计者的思维方式。我们才能更好的配置出我们需要的日志策略及性能。

2.1 设计思路

(1)控制台日志和写入文件日志分开
日志本身是可追加写入的,定义为追加器appender,控制台和写入文件日志分别有ConsleAppdenderFileAppender两个追加器处理。

(2)日志打印的内容可以控制参数格式
打印出的日志一定是规整的,便于开发跟踪问题。例如:问题发生的时间,由于大部分程序都是多线程运行的,则需要知道每个业务请求的线程号,出问题的使用到的类名等等.

<encoder>
     <pattern><![CDATA[%n[%d{yyyy-MM-dd HH:mm:ss.SSS}] [level: %p] [Thread: %t] [ Class:%c >> Method: %M:%L ]%n%p:%m%n]]></pattern>
 </encoder>

(3)写入文件中的日志不宜过大同时考虑时间跨天问题
考虑到将文件分开(可卷起Rolling),则使用升级的追加器RollingFileAppender,同时分开规则(Policy)考虑到跨天跨时间 。则在追加器中定义拆分规则:SizeAndTimeBasedRollingPolicy

 <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.base}/%d{yyyyMMdd}/${app.name}_%d{yyyyMMdd}_%i.log.gz</fileNamePattern>
        <!--文件大小-->
       <maxFileSize>2GB</maxFileSize>
      <!--历史个数-->
      <maxHistory>180</maxHistory>
</rollingPolicy>

(4)日志应该可以灵活指定输出级别
针对“ com.sports ”包下的日志,控制台和日志文件都使用debug级别。

    <logger name="com.sports" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOG_FILE"/>
        <!--<appender-ref ref="myAppender"/>-->
    </logger>

(5)必须对主体日志指定输出级别
虽然我们会对不同的包或者框架下日志设置输出级别,但不可缺少主体日志输出级别:root

 <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOG_FILE"/>
        <!--<appender-ref ref="mqAppender"/>-->
    </root>

(6)日志可以异步写入
通常日志是和业务应用公用同一个线程,写系统日志会有IO开销,会损耗性能,我们应该可以异步写日志

   <!-- 异步输出 -->
    <appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>256</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="INFO-LOG"/>
    </appender>
2.2 文件样例
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern><![CDATA[%n[%d{yyyy-MM-dd HH:mm:ss.SSS}] [level: %p] [Thread: %t] [ Class:%c >> Method: %M:%L ]%n%p:%m%n]]></pattern>
        </encoder>
    </appender>
    <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern><![CDATA[%n[%d{yyyy-MM-dd HH:mm:ss.SSS}] [level: %p] [Thread: %t] [ Class:%c >> Method: %M:%L ]%n%p:%m%n]]></pattern>
        </encoder>
        <file>logs/sports-web.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/sports-web.-%d{yyyyMMdd}.%i.log</fileNamePattern>
            <!-- 每天一个日志文件,当天的日志文件超过10MB时,生成新的日志文件,当天的日志文件数量超过totalSizeCap/maxFileSize,日志文件就会被回滚覆盖。 -->
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy> 
    </appender>
    <logger name="com.sports" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOG_FILE"/>
        <!--<appender-ref ref="myAppender"/>-->
    </logger>
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOG_FILE"/>
        <!--<appender-ref ref="mqAppender"/>-->
    </root>
</configuration>

3、日志格式pattern部分

logback框架日志格式通过PatternLayout方式配置,样例:

<encoder>   
   <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
</encoder 

encoder作用:①把日志信息转换成字节数组;②把字节数组写入到输出流。
PatternLayoutEncoder 是唯一有用的且默认的encoderencoder下只有一个pattern节点。

(1)% + “转换符号”输出信息
%t : t表示线程的转换符,打印控制台" [Thread: restartedMain]"
pattern中的转换符列表

转换符 说明 使用方式 备注
m / msg / message 应用程序输出信息 %msg 主要内容信息
M / method 输出执行日志请求的方法名。 %M 尽量避免使用,除非执行速度不造成任何问题
p / le / level 日志等级 %p
L / line 行号 %line 尽量避免使用,除非执行速度不造成任何问题

(2)格式修饰符
与转换符共同使用,可选的格式修饰符位于“%”和转换符之间
左对齐 修饰符 :符号是减号“-”;接着是可选的最小宽度 修饰符,用十进制数表示


(3)使用slf4j中的MDC新增线程参数
%X”用于输出和当前线程相关联的MDC(嵌套诊断环境),格式 %X{xxx},使用org.slf4j.MDC添加key/value即可增加新值,

 <encoder>
     <pattern>%d{yyyy-MM-dd hh:mm:ss} [%thread] [traceId = %X{traceId}] [%logger{32}] - %msg%n</pattern>
</encoder>

其中tracId是在MDC中设置进当前线程中的参数,记得在线程运行完时清除clear掉。

@Before(value = "pointCut()")
public void before(JoinPoint joinPoint){
      // 省略代码...
      MDC.put("traceId", UUID.randomUUID().toString());
}
  • 结束清除
@AfterReturning(value = "pointCut()", returning = "val")
public void afterReturning(JoinPoint joinPoint, Object val) {
         // 省略代码...
        MDC.clear();
}
  • 各个参数说明
示例 说明
%X 输出所有值
%X{testKey} 输出testKey所对应的value,且无默认值
%X{testKey:-} 输出testKey所对应的value,默认为空
%X{testKey:-aaa} 输出testKey所对应的value,默认为aaa
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容