Logback,是一个开源的日志组件,同样也是由log4j创始人设计。天然支持SLF4J(Simple Logging Facade For Java)。在Spring Boot中,使用Logback是最优的选择,可使用logback-spring.xml进行配置使用。

实际项目中经常需要通过日志文件来定位,不同于本地测试开发环境,线上的日志文件如果不做按日期切割整理就会比较乱,而且打开日志文件需要很久。

本文旨在提供多种实际可用的日志配置文件模板,便捷可用。

文章目录

  • 一、Logback使用
  • 二、默认实现
  • 三、实用模板
  • 四、总结

一、Logback使用

logback有5种级别,分别是TRACE < DEBUG < INFO < WARN < ERROR。

使用如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.LocalDateTime;public class MyLogback {private Logger logger = LoggerFactory.getLogger(MyLogback.class);void test(){String now = LocalDateTime.now().toStringlogger.trace("trace 测试日志打印->{}", now);logger.debug("debug 测试日志打印->{}", now);logger.info("info   测试日志打印->{}", now);logger.warn("warn   测试日志打印->{}", now);logger.error("error 测试日志打印->{}", now);}
}

如何自定义日志管理。在resource目录下新建一个logback-spring.xml文件。该xml文件主要分为以下几部分:

  1. 头部声明

    <?xml version="1.0" encoding="UTF-8"?>
    
  2. 主节点

    包含参数定义以及关键appender节点

    <configuration><!-- 项目名称 例:mylogback --><property name="APP_NAME" value="mylogback" /><!-- 日志目录 例:/usr/local/mylogback/logs --><property name="LOG_PATH" value="/usr/local/${APP_NAME}/logs" />
    </configuration>
    
  3. 关键子节点

    • appender:是一个接口,最重要的有两个Appender,分别为ConsoleAppender和RollingFileAppender。顾名思义,前者主要是控制台输出,对应的class值为:ch.qos.logback.core.ConsoleAppender;后者则是输出到文件中,对应的class值为ch.qos.logback.core.rolling.RollingFileAppender
    • file:主要针对RollingFileAppender输出文件命名规则
    • encoder:最主要的是pattern,定义日志格式
    • filter:日志过滤规则
    • rollingPolicy:主要针对文件日志输出,定义输出日志策略
    <appender name="myDebuglog" class="ch.qos.logback.core.ConsoleAppender"><file>${LOG_PATH}/debug.log</file><encoder><charset>UTF-8</charset><pattern>${FILE_LOG_PATTERN}</pattern></encoder><!-- 过滤策略 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 设置命中策略 debug、info、warn、error --><level>debug</level><!-- 命中设置的日志等级就记录 --><onMatch>ACCEPT</onMatch><!-- 未命中则拒绝该appender策略 --><onMismatch>DENY</onMismatch></filter><!-- 日志归档 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 每产生一个日志文件,该日志文件的保存期限为30天 --><maxHistory>30</maxHistory><!-- 单个文件达到最大10MB时开始切分 --><maxFileSize>10MB</maxFileSize><!-- 当日志容量超过20GB,即使没有到保存期限的30天也会开启日志清理 --><totalSizeCap>20GB</totalSizeCap></rollingPolicy>
    </appender>
    

二、默认实现

如果我们不写logback.xml配置文件,工程项目也会正常打印日志,因为springboot有默认的实现,即通过以下两个文件进行指定,以下是Spring Boot下的org/springframework/boot/logging/logback/base.xml、defaults.xml文件默认实现:

base.xml:

<?xml version="1.0" encoding="UTF-8"?><!--
Base logback configuration provided for compatibility with Spring Boot 1.1
--><included><include resource="org/springframework/boot/logging/logback/defaults.xml" /><property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/><include resource="org/springframework/boot/logging/logback/console-appender.xml" /><include resource="org/springframework/boot/logging/logback/file-appender.xml" /><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root>
</included>

defaults.xml:

<?xml version="1.0" encoding="UTF-8"?><!--
Default logback configuration provided for import
--><included><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /><property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/><property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/><logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/><logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/><logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/><logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/><logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/><logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/><logger name="org.hibernate.validator.internal.util.Version" level="WARN"/><logger name="org.springframework.boot.actuate.endpoint.jmx" level="WARN"/>
</included>

三、实用模板

经过上述分析,对logback配置文件有了大概的了解,接下来旨在提供标准可用的日志配置文件,并且由于trace级别的日志打印极少用到,我们在配置文件中暂不体现trace级别配置,若有需要请根据实际需求进行增减调整配置。

此处定义的日志目录会输出到C盘,若部署到线上需要做调整;日志最大保留天数均为30天,单个文件最大不超过100MB,且在同个level下总文件大小不超过20GB,否则即使没超过30天也会自动清理日志:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 引入默认实现 --><include resource="org/springframework/boot/logging/logback/defaults.xml" /><!-- 自定义项目名称 例:mylogback --><property name="APP_NAME" value="mylogback" /><!-- 自定义日志目录 若线上部署环境需调整 如:/usr/local/${APP_NAME}/logs --><property name="LOG_PATH" value="C:/${APP_NAME}/logs" /><!-- 引入日志等级参数,支持从配置文件读入 --><springProperty scope="context" name="log.level" source="log.level"/><!-- 时间滚动输出 level为 DEBUG 日志 --><appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/debug.log</file><encoder><charset>UTF-8</charset><pattern>${FILE_LOG_PATTERN}</pattern></encoder><!-- 日志归档 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><maxFileSize>100MB</maxFileSize><totalSizeCap>20GB</totalSizeCap></rollingPolicy><!-- 此日志文件只记录debug级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>debug</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 时间滚动输出 level为 INFO 日志 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/info.log</file><encoder><charset>UTF-8</charset><!-- 引用默认的配置项 --><pattern>${FILE_LOG_PATTERN}</pattern></encoder><!-- 日志归档 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><maxFileSize>100MB</maxFileSize><totalSizeCap>20GB</totalSizeCap></rollingPolicy><!-- 此日志文件只记录info级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>info</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 时间滚动输出 level为 WARN 日志 --><appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/warn.log</file><encoder><charset>UTF-8</charset><pattern>${FILE_LOG_PATTERN}</pattern></encoder><!-- 日志归档 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><maxFileSize>100MB</maxFileSize><totalSizeCap>20GB</totalSizeCap></rollingPolicy><!-- 此日志文件只记录warn级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>warn</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 时间滚动输出 level为 ERROR 日志 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/error.log</file><encoder><charset>UTF-8</charset><pattern>${FILE_LOG_PATTERN}</pattern></encoder><!-- 日志归档 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><maxFileSize>100MB</maxFileSize><totalSizeCap>20GB</totalSizeCap></rollingPolicy><!-- 此日志文件只记录error级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>error</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>${log.level}</level></filter><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>utf8</charset></encoder></appender><root level="${log.level}"><appender-ref ref="DEBUG_FILE" /><appender-ref ref="INFO_FILE" /><appender-ref ref="WARN_FILE" /><appender-ref ref="ERROR_FILE" /><appender-ref ref="CONSOLE" /></root>
</configuration>

使用前建议配置日志打印等级,表示只打印输出设置值及以上等级的日志:

logging:level:root: debug #debug info warn error

实际使用效果如下:

四、总结

项目中最细微的日志打印虽然平时感知不到,正所谓润物细无声,但是实际上好的日志打印能够帮助你更快定位项目的线上问题。

读者可以clone该项目体验日志文件输出,该项目会定时每隔5秒打印各个等级的日志:

https://gitee.com/dearvainycos/mylogback.git

参考资料:

  • springboot使用logback日志框架超详细教程

Logback-日志文件按日期切分解决方案相关推荐

  1. logback日志文件

    1.logback日志文件 1.加载依赖 <dependency><groupId>org.logback-extensions</groupId><!--l ...

  2. Linux系统下nohup日志文件按日期分割展示

    基于普元EOS系统nohup.out日志文件优化 效果展示: 步骤: 结语: 效果展示: 如上图,优化后nohup.out日志文件按照日期进行展示. 思路: 编写脚本,每日凌晨将前一天的日志复制到备份 ...

  3. mysql 日志文件 自动_自动恢复MySQL数据库的日志文件思路分享及解决方案

    如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据."mysqlbinlog:用 ...

  4. java中读取logback日志文件_java 中使用logback日志,并实现日志按天分类压缩保存。...

    以maven项目作为构建工具为例,首先引入使用logback需要的3个依赖,需要注意使用logback是需要引入slf4j-api的,因为logback是基于slf4j的 ch.qos.logback ...

  5. oracle11g日志分析,Oracle11g在Windows环境下监听日志文件达到4G问题解决方案

    1.症状表现:应用无法启动,数据库连接异常缓慢,或直接超时,无法连接. 2.病情分析:监听日志文件listener.log中记录着监听连接的各种信息,并不断增长,最终达到4G. 3.解决方案一:治标, ...

  6. PTC指定位置安装许可服务器,proe野火3.0安装问题之“许可证管理已成功安装,但不能启动,请参阅日志文件..”我自己的解决方案(原...

    如果你正因为安装proe野火3.0碰到每次安装服务器总出现 "...许可证管理已成功安装,但不能启动,请参阅日志文件...."的对话框,那你可以参考一下我的解决方案: 先介绍一下: ...

  7. java中读取logback日志文件_java 控制台 System.out日志输出到logback文件里

    使用spring boot2.0.7开发项目,由于调用了其他组c++的本地方法,他们的日志是直接在控制台打印日志的,而我们这边统一用logback记录日志,然后logback配置后控制台的日志没有记录 ...

  8. 随笔-tomcat的日志文件按日期每天生成

    在server.xml里加上<host>节点后面加上 <Valve className="org.apache.catalina.valves.AccessLogValve ...

  9. logback过期日志文件自动删除配置

    logback过期日志文件自动删除配置 前言 logback应该是目前最主流的日志框架,在实际使用中经常遇到打印的日志文件不会自动删除,导致日志文件占有大量磁盘空间的问题. 本文主要介绍logback ...

  10. SpringMVC学习(三)——SpringMVC+Slf4j+Log4j+Logback日志集成实战分享

    文章目录 1.概述 1.1 说明 1.2 日志体系 1.2.1 JCL日志面门介绍 1.2.2 Slf4j日志面门介绍 2.几种日志系统介绍: 2.1 Slf4j 2.2 Commons-loggin ...

最新文章

  1. python创建图片对应的csv格式_Python:如何从csv文件创建图形节点和边?
  2. 例6.12(Java)
  3. 记一次简单的sql优化
  4. POJ3264 【RMQ基础题—ST-线段树】
  5. sigprocmask 阻塞进程
  6. Option键用的好,鼠标用的少(这6个你绝对不知道的...)
  7. 计算机完成逻辑运算的原理,计算机组成原理2.5.1逻辑运算.ppt
  8. CCF201604-5 网络连接(募集解题代码)
  9. latex怎么打区间_涨出天际的安阳房价,这个月怎么样了?
  10. Python下载和安装图文教程[超详细]
  11. 台式计算机显卡最高温度多少,笔记本/台式机显卡核心多少度正常?GPU温度过高该如何处理?...
  12. 常用分子对接软件简介
  13. 安装 adobe 软件 photoshop 遇到 81错误 mac
  14. 适用场景:All kinds of GCs
  15. 小程序 _ 学习笔记
  16. 一文搞懂马尔可夫链 (Markov Chain)
  17. oraclenbsp;level关键字
  18. Linux系统运行时参数命令--网络IO性能监控
  19. UART中的硬件流控RTS与CTS
  20. OSG读取obj模型坐标变化的问题

热门文章

  1. 【史上最全的PLC源码】2978个PLC应用例程合集
  2. Android音视频开发全系列教程
  3. doapk+java环境_JD-GUI使用方法JD-GUIjava反编译工具下载(支持X64位的系统) v1.5 最新版 - java反编译工具中文下载_数码资源网...
  4. 《Apache Spark源码剖析》
  5. 如何获得WPA握手包EWSA破解WPA密码教程[zz]
  6. View 的测量 MeasureSpec
  7. FastDFS分布文件系统Java客户端使用
  8. 按钮 加加加 减减减
  9. mysql root拿站_[转载]拿站,专业拿站,拿站工具,手工注入,手工入侵,拿站教程,拿站知识,拿站原理...
  10. DirectShow 简介