springboot-logback日志

前言

      项目中日志系统是必不可少的,目前比较流行的日志框架有log4j、logback等,可能大家还不知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。另外 slf4j(Simple Logging Facade for Java) 则是一个日志门面框架,提供了日志系统中常用的接口,logback 和 log4j 则对slf4j 进行了实现。我们本文将讲述如何在spring boot 中应用 logback+slf4j实现日志的记录。

为什么要使用logback

logback是log4j 框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J

Logback的定制性更加灵活,同时也是spring boot的内置日志框架

开始使用

1.往pom文件添加依赖


<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>1.7.21</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

<version>1.2.1</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-core</artifactId>

<version>1.2.1</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-access</artifactId>

<version>1.2.1</version>

</dependency>

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.18.0</version>

</dependency>


2.配置application.yml

注:二者不能同时使用,如若同时使用,则只有logging.file生效

logging.file.path=日志文件路径

logging.config=classpath:logback.xml

3.logback.xml详情

<configuration debug="true">,

<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

<contextName>application</contextName>

<springProperty scope="context" name="log.path" source="logging.file.path"/>

<property name="log.maxHistory" value="15" />

<property name="log.colorPattern" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(-){faint} %clr([%15.15t]){blue} %clr(%-48.48logger{48}){cyan} %clr(:){faint} %m%n%wex"/>

<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n" />

<!--输出到控制台-->

<logger name = "org.apache.http.impl.conn.PoolingHttpClientConnectionManager" level = "WARN"/>

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">

<encoder>

            <!-- %37():如果字符没有37个字符长度,则左侧用空格补齐 -->

            <!-- %-37():如果字符没有37个字符长度,则右侧用空格补齐 -->

            <!-- %15.15():如果记录的线程字符长度小于15(第一个)则用空格在左侧补齐,如果字符长度大于15(第二个),则从开头开始截断多余的字符 -->

            <!-- %-40.40():如果记录的logger字符长度小于40(第一个)则用空格在右侧补齐,如果字符长度大于40(第二个),则从开头开始截断多余的字符 -->

            <!-- %msg:日志打印详情 -->

            <!-- %n:换行符 -->

            <!-- %highlight():转换说明符以粗体红色显示其级别为ERROR的事件,红色为WARN,BLUE为INFO,以及其他级别的默认颜色。 -->

            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) --- [%10.15(%thread)] %cyan(%-25.25(%logger{40})) : %msg%n</pattern>

<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->

            <charset>UTF-8</charset>

</encoder>

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">

<level>ALL</level>

</filter>

</appender>

<!--输出到文件 info 级别的log-->

    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">

<filter class="ch.qos.logback.classic.filter.LevelFilter">

<!--            onMatch="ACCEPT" 表示匹配该级别及以上-->

<!--            onMatch="DENY" 表示不匹配该级别及以上-->

<!--            onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上-->

<!--            onMismatch="ACCEPT" 表示匹配该级别以下-->

<!--            onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的-->

<!--            onMismatch="DENY" 表示不匹配该级别以下的-->

            <level>INFO</level>

<onMatch>ACCEPT</onMatch><!-- 是否全部接收 -->

            <onMismatch>ACCEPT</onMismatch><!-- 是否接收level级别以下的日志 -->

        </filter>

<!--有两个与RollingFileAppender交互的重要子组件。 第一个RollingFileAppender子组件,即RollingPolicy:负责执行翻转所需的操作。        RollingFileAppender的第二个子组件,即TriggeringPolicy:将确定是否以及何时发生翻转。 因此,RollingPolicy负责什么和TriggeringPolicy负责什么时候.

        作为任何用途,RollingFileAppender必须同时设置RollingPolicy和TriggeringPolicy,但是,如果其RollingPolicy也实现了TriggeringPolicy接口,则只需要显式指定前者。-->

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

<!-- 日志文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->

            <!-- 文件名:logs/project_info.2017-12-05.0.log -->

            <!-- 注意:SizeAndTimeBasedRollingPolicy中 %i和%d令牌都是强制性的,必须存在,要不会报错 -->

            <fileNamePattern>logs/project_info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

<!-- 每产生一个日志文件,该日志文件的保存期限为30天, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天

            如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd-->

            <maxHistory>30</maxHistory>

<!-- 每个日志文件到10mb的时候开始切分,最多保留30天,但最大到20GB,哪怕没到30天也要删除多余的日志 -->

            <totalSizeCap>20GB</totalSizeCap>

<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成5KB看效果 -->

            <maxFileSize>10MB</maxFileSize>

</rollingPolicy>

<!--编码器-->

        <encoder>

<!-- pattern节点,用来设置日志的输入格式 ps:日志文件中没有设置颜色,否则颜色部分会有ESC[0:39em等乱码-->

            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%10.15(%thread)] %-40.40(%logger{40}) : %msg%n</pattern>

<!-- 记录日志的编码:此处设置字符集- -->

            <charset>UTF-8</charset>

</encoder>

</appender>

<!--输出到文件 error 级别的log-->

    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">

<!--日志文件路径和名称-->

        <File>logs/project_error.log</File>

<!--是否追加到文件末尾,默认为true-->

        <append>true</append>

<!-- ThresholdFilter过滤低于指定阈值的事件。 对于等于或高于阈值的事件,ThresholdFilter将在调用其decision()方法时响应NEUTRAL。 但是,将拒绝级别低于阈值的事件 -->

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

<level>ERROR</level><!-- 低于ERROR级别的日志(debug,info)将被拒绝,等于或者高于ERROR的级别将相应NEUTRAL -->

        </filter>

<!--有两个与RollingFileAppender交互的重要子组件。 第一个RollingFileAppender子组件,即RollingPolicy:负责执行翻转所需的操作。        RollingFileAppender的第二个子组件,即TriggeringPolicy:将确定是否以及何时发生翻转。 因此,RollingPolicy负责什么和TriggeringPolicy负责什么时候.

      作为任何用途,RollingFileAppender必须同时设置RollingPolicy和TriggeringPolicy,但是,如果其RollingPolicy也实现了TriggeringPolicy接口,则只需要显式指定前者。-->

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->

            <!-- 文件名:logs/project_error.2017-12-05.0.log -->

            <!-- 注意:SizeAndTimeBasedRollingPolicy中 %i和%d令牌都是强制性的,必须存在,要不会报错 -->

            <fileNamePattern>logs/project_error.%d.%i.log</fileNamePattern>

<!-- 每产生一个日志文件,该日志文件的保存期限为30天, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天

            如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd-->

            <maxHistory>30</maxHistory>

<!-- 每个日志文件到10mb的时候开始切分,最多保留30天,但最大到20GB,哪怕没到30天也要删除多余的日志 -->

            <totalSizeCap>20GB</totalSizeCap>

<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成5KB看效果 -->

            <maxFileSize>10MB</maxFileSize>

</rollingPolicy>

<!--编码器-->

        <encoder>

<!-- pattern节点,用来设置日志的输入格式 ps:日志文件中没有设置颜色,否则颜色部分会有ESC[0:39em等乱码-->

            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15(%thread)] %-40.40(%logger{40}) : %msg%n</pattern>

<!-- 记录日志的编码:此处设置字符集- -->

            <charset>UTF-8</charset>

</encoder>

</appender>

<!--给定记录器的每个启用的日志记录请求都将转发到该记录器中的所有appender以及层次结构中较高的appender(不用在意level值)。

    换句话说,appender是从记录器层次结构中附加地继承的。

    例如,如果将控制台appender添加到根记录器,则所有启用的日志记录请求将至少在控制台上打印。

    如果另外将文件追加器添加到记录器(例如L),则对L和L'子项启用的记录请求将打印在文件和控制台上。

    通过将记录器的additivity标志设置为false,可以覆盖此默认行为,以便不再添加appender累积-->

    <!-- configuration中最多允许一个root,别的logger如果没有设置级别则从父级别root继承 -->

    <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->

    <root level = "INFO">

<appender-ref ref="console" />

</root>

 <root level="INFO">

<appender-ref ref="file_info"/>

<appender-ref ref="file_error" />

</root>

</configuration >

4.参考地址:https://blog.csdn.net/H900302/article/details/108549930


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容