SpringBoot整合logback实现对日志的管理

logback是什么?

  • logback是由log4j创始人设计的又一个开源日志组件,是log4j的升级版本
  • 优化了log4j存在的性能问题,SpringBoot默认是使用logback进行日志管理的

logback能做什么?

  • 使用logback我们可以自定义控制台日志输出
  • 可以实现对不同日志不同级别打印到不同的文件中
  • 可以对日志进行归档保存,并定时删除

使用logback来管理日志

在application.properties文件中指定logback配置文件(如果配置文件名称也为logback-spring.xml,可以不指定,SpringBoot有默认配置的)

logging.config=classpath:logback-spring.xml

在resources下添加logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8"?
<configuration scan="true" scanPeriod="10 seconds" debug="false">
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <contextName>logback</contextName>
    
    <property name="log_path" value="/log"/><!-- 如果在Windows环境下使用/开头的路径,将会被指定到项目所在的盘符 -->
    <property name="log_pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{50} - %msg%n"/>
    <property name="log_fileNamePattern" value="-%d{yyyy-MM-dd}.%i.log"/>
    <property name="log_maxFileSize" value="100MB"/>
    <property name="log_maxHistory" value="15"/>

    <!-- 输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder charset="UTF-8">
            <pattern>${log_pattern}</pattern>
        </encoder>
    </appender>

    <!-- 输出到app.log文件 -->
    <appender name="APP" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log_path}/app.log</file>
        <encoder charset="UTF-8">
            <pattern>${log_pattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_path}/app${log_fileNamePattern}</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${log_maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>${log_maxHistory}</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 输出到sql.log文件 -->
    <appender name="SQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log_path}/sql.log</file>
        <encoder charset="UTF-8">
            <pattern>${log_pattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_path}/sql-${log_fileNamePattern}</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${log_maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>${log_maxHistory}</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 自定义包日志级别要加上additivity="false",表示不会向上传递 -->
    <logger name="org.springframework">
        <level value="WARN"/>
    </logger>
    <logger name="org.apache" additivity="false">
        <level value="WARN"/>
    </logger>
    <logger name="org.mybatis" additivity="false">
        <level value="WARN"/>
    </logger>

    <!-- mapper的sql配置 -->
    <logger name="com.wyj.mapper" level="DEBUG" additivity="false">
        <appender-ref ref="SQL" />
    </logger>

	<!-- 自定义包或者类输出的级别和策略 -->
    <logger name="com.wyj.interceptor.SqlStatementInterceptor" level="INFO" additivity="false">
        <appender-ref ref="SQL" />
        <appender-ref ref="APP" />
        <appender-ref ref="CONSOLE" />
    </logger>

    <!-- root用来指定最基础的日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="APP"/>
    </root>
</configuration>

logback配置文件中属性说明

  • logback默认有五个日志级别,从低到高分别为(大小写无所谓):

trace < debug < info < warn < error

  • SpringBoot默认为我们输出的日志级别为infowarnerror,如果还使用其他级别的日志,可以在配置中进行配置

    • 对嵌入的框架,例如Spring、Mybatis需要在application.properties中配置debug=true即可
    • 对自己的项目日志需要在logback-spring.xml文件中使用标签进行配置
  • 对日志进行颜色渲染
    如果编译工具支持ANSI的话,会给日志输出进行颜色渲染,提高日志的可读性,只需要在application.properties文件配置spring.output.ansi.enabled,它可以设置为以下三种值:

    • ALWAYS:启动ANSI输出
    • DETECT:尝试使用ANSI输出
    • NEVER:禁用ANSI日志输出

  • <configuration>:用来配置logback
    • scan:表示配置文件如果发生改变,是否会被重新加载,默认为true
    • scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是秒;当scan为true时,此属性生效。默认的时间间隔为1分钟
    • debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false
  • <include>:用来引入外部资源文件
    • resource:表示资源路径
  • <contextName>:每个logger都关联到logger上下文,默认上下文名称为default,但可以使用设置成其他名字,用于区分不同应用程序的记录,一旦设置,不能修改,可以通过%contextName来打印日志上下文名称
  • <property>:自定义变量,使用${}来使用变量
    • name:变量名
    • value:变量值
  • <appender>:日志输出策略
    • name:策略名称
    • class:何种策略。ch.qos.logback.core.ConsoleAppender是对应的控制台输出策略;ch.qos.logback.core.rolling.RollingFileAppender是对应的文件输出策略
    • <filter>:可以输出指定日志输出级别以上的日志输出,日志输出级别以下的将不输出
      • class:何种过滤器,ch.qos.logback.classic.filter.ThresholdFilter为系统自带的过滤器
      • <level>:日志输出级别
    • <encoder>:设置日志输出的格式
      • charset:日志输出的编码
      • <pattern>:日志输出的格式
    • <file>:日志输出的路径及文件名
    • <rollingPolicy>:设置日志切割策略
      • class:日志切割策略
      • <fileNamePattern>:定义了日志的切割方式,把每一天的日志归档到一个文件中
      • <timeBasedFileNamingAndTriggeringPolicy>:定义日志切割文件
        • <maxFileSize>:用于指定日志文件的上限大小,到了这个上限值,就会删除旧的日志
      • <maxHistory>:表示只保存最近多少天的日志,以防止日志填满整个磁盘空间
  • <logger>:用来指定某一个包或者具体的类的日志打印级别
    • name:某一个包或者具体的类
    • level:指定日志输出级别
    • additivity:是否向上传递
    • <level>:指定日志输出级别
      • value:指定日志输出级别
    • <appender-ref>:引用自定义的日志输出策略,就是<appender>
      • ref:引用日志输出策略
  • <root>:用来指定最基础的日志输出级别
    • level:指定日志输出级别
    • <appender-ref>:引用自定义的日志输出策略,就是<appender>
      • ref:引用日志输出策略
  • <springProfile>:用来指定不同环境来使不同的日志输出
    • name:使用的环境名称,多个环境使用,分开,需在application.properties文件中通过spring.profiles.active来指定当前使用的环境,!pro表示当为环境为pro时禁用以下配置
    • <root>:和上面的root配置一致
    • <logger>:和上面的root配置一致

测试

控制台打印
在这里插入图片描述
app.log

2019-07-31 21:54:43.346 INFO  --- [main] com.wyj.LogbackApplication - Starting LogbackApplication on wyj-PersonComput with PID 12632 (E:\Java\IDEA_WorkSpace\springboot-learning\springboot-logback01\target\classes started by wyj in E:\Java\IDEA_WorkSpace\springboot-learning)
2019-07-31 21:54:43.346 INFO  --- [main] com.wyj.LogbackApplication - No active profile set, falling back to default profiles: default
2019-07-31 21:54:48.415 INFO  --- [main] com.wyj.LogbackApplication - Started LogbackApplication in 6.654 seconds (JVM running for 8.978)
2019-07-31 21:54:57.818 INFO  --- [http-nio-8080-exec-1] com.wyj.controller.LoggerController - 这是一个info日志
2019-07-31 21:54:57.820 WARN  --- [http-nio-8080-exec-1] com.wyj.controller.LoggerController - 这是一个warn日志
2019-07-31 21:54:57.821 ERROR --- [http-nio-8080-exec-1] com.wyj.controller.LoggerController - 这是一个error日志
2019-07-31 21:54:57.852 INFO  --- [http-nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
2019-07-31 21:54:58.138 INFO  --- [http-nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
2019-07-31 21:54:58.203 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> transmit Parameters is [ null ]
2019-07-31 21:54:58.203 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> execute Mapper name is [ com.wyj.mapper.LoggerMapper ]
2019-07-31 21:54:58.203 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> execute Mapper method is [ findAll ]
2019-07-31 21:54:58.204 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> execute SQL with Parameters is [ select * from `user` ]
2019-07-31 21:54:58.204 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> execute SQL cost [ 359 ] ms

sql.log

2019-07-31 21:54:58.150 DEBUG --- [http-nio-8080-exec-1] com.wyj.mapper.LoggerMapper.findAll - ==>  Preparing: select * from `user` 
2019-07-31 21:54:58.174 DEBUG --- [http-nio-8080-exec-1] com.wyj.mapper.LoggerMapper.findAll - ==> Parameters: 
2019-07-31 21:54:58.202 DEBUG --- [http-nio-8080-exec-1] com.wyj.mapper.LoggerMapper.findAll - <==      Total: 1
2019-07-31 21:54:58.203 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> transmit Parameters is [ null ]
2019-07-31 21:54:58.203 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> execute Mapper name is [ com.wyj.mapper.LoggerMapper ]
2019-07-31 21:54:58.203 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> execute Mapper method is [ findAll ]
2019-07-31 21:54:58.204 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> execute SQL with Parameters is [ select * from `user` ]
2019-07-31 21:54:58.204 INFO  --- [http-nio-8080-exec-1] com.wyj.interceptor.SqlStatementInterceptor - ==> execute SQL cost [ 359 ] ms

完整的源码获取

GitHub:https://github.com/291685399/springboot-learning/tree/master/springboot-logback01

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值