老板下了死命令,要把日志系统切换到Logback(3)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 老板下了死命令,要把日志系统切换到Logback

可以确认一下内容,发现三个 appender 都在。


image.png


但是呢,转换后的文件并不能直接使用,需要稍微做一些调整,因为:


第一,日志的格式化有细微的不同,Logback 中没有 %l。


第二,RollingFileAppender 需要指定 RollingPolicy 和 TriggeringPolicy,前者负责日志的滚动功能,后者负责日志滚动的时机。如果 RollingPolicy 也实现了 TriggeringPolicy 接口,那么只需要设置 RollingPolicy 就好了。


TimeBasedRollingPolicy 和 SizeAndTimeBasedRollingPolicy 是两种最常用的滚动策略。


TimeBasedRollingPolicy 同时实现了 RollingPolicy 与 TriggeringPolicy 接口,因此使用 TimeBasedRollingPolicy 的时候就可以不指定 TriggeringPolicy。


TimeBasedRollingPolicy 可以指定以下属性:


fileNamePattern,用来定义文件的名字(必选项)。它的值应该由文件名加上一个 %d 的占位符。%d 应该包含 java.text.SimpleDateFormat 中规定的日期格式,缺省是 yyyy-MM-dd。滚动周期是通过 fileNamePattern 推断出来的。


maxHistory,最多保留多少数量的日志文件(可选项),将会通过异步的方式删除旧的文件。比如,你指定按月滚动,指定 maxHistory = 6,那么 6 个月内的日志文件将会保留,超过 6 个月的将会被删除。


totalSizeCap,所有日志文件的大小(可选项)。超出这个大小时,旧的日志文件将会被异步删除。需要配合 maxHistory 属性一起使用,并且是第二条件。


来看下面这个 RollingFileAppender 配置:


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

   <file>debug.log</file>

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

       <!--            按天滚动 -->

       <fileNamePattern>debug.%d{yyyy-MM-dd}.log</fileNamePattern>

       <!--            保存 30 天的历史记录,最大大小为 30GB -->

       <maxHistory>30</maxHistory>

       <totalSizeCap>3GB</totalSizeCap>

   </rollingPolicy>

   <encoder>

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

   </encoder>

</appender>



基于按天滚动的文件策略,最多保留 30 天,最大大小为 30G。


SizeAndTimeBasedRollingPolicy 比 TimeBasedRollingPolicy 多了一个日志文件大小设定的属性:maxFileSize,其他完全一样。


基于我们对 RollingPolicy 的了解,可以把 logback-test.xml 的内容调整为以下内容:


<configuration>

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

       <Target>System.out</Target>

       <encoder>

           <pattern>%d{HH:mm:ss.SSS} [%thread] %level %logger{36} - %msg%n</pattern>

       </encoder>

   </appender>

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

   <Append>true</Append>

   <File>debug.log</File>

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

       <!--            按天轮转 -->

       <fileNamePattern>debug.%d{yyyy-MM-dd}.log</fileNamePattern>

       <!--            保存 30 天的历史记录,最大大小为 30GB -->

       <maxHistory>30</maxHistory>

       <totalSizeCap>3GB</totalSizeCap>

   </rollingPolicy>

   <encoder>

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

   </encoder>

</appender>

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

       <File>error.log</File>

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

           <!--            按天轮转 -->

           <fileNamePattern>error.%d{yyyy-MM-dd}.log</fileNamePattern>

           <!--            保存 30 天的历史记录,最大大小为 30GB -->

           <maxHistory>30</maxHistory>

           <totalSizeCap>3GB</totalSizeCap>

       </rollingPolicy>

       <encoder>

           <pattern>%d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n</pattern>

       </encoder>

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

           <level>ERROR</level>

       </filter>

   </appender>

   <root level="debug">

       <appender-ref ref="stdout"/>

       <appender-ref ref="D"/>

       <appender-ref ref="E"/>

   </root>

</configuration>



修改 Test 类的内容:


public class Test {

   static Logger logger = LoggerFactory.getLogger(Test.class);

   public static void main(String[] args) {

       logger.debug("logback");

       logger.error("logback");

   }

}


运行后,可以在 target 目录下看到两个文件:debug.log 和 errror.log。


image.png


到此为止,项目已经从 Log4j 切换到 Logback 了,过程非常的丝滑顺畅,嘿嘿。


04、Logback 手册


Logback 的官网上是有一份手册的,非常详细,足足 200 多页,只不过是英文版的。小伙伴们可以看完我这篇文章入门实操的 Logback 教程后,到下面的地址看官方手册。


http://logback.qos.ch/manual/index.html

如果英文阅读能力有限的话,可以到 GitHub 上查看雷锋翻译的中文版:


https://github.com/itwanger/logback-chinese-manual

当然了,还有一部分小伙伴喜欢看离线版的 PDF,我已经整理好了:


链接:https://pan.baidu.com/s/16FrbwycYUUIfKknlLhRKYA 密码:bptl


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 数据采集 数据处理
【Flume拓扑揭秘】掌握Flume的四大常用结构,构建强大的日志收集系统!
【8月更文挑战第24天】Apache Flume是一个强大的工具,专为大规模日志数据的收集、聚合及传输设计。其核心架构包括源(Source)、通道(Channel)与接收器(Sink)。Flume支持多样化的拓扑结构以适应不同需求,包括单层、扇入(Fan-in)、扇出(Fan-out)及复杂多层拓扑。单层拓扑简单直观,适用于单一数据流场景;扇入结构集中处理多源头数据;扇出结构则实现数据多目的地分发;复杂多层拓扑提供高度灵活性,适合多层次数据处理。通过灵活配置,Flume能够高效构建各种规模的数据收集系统。
30 0
|
2月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
2月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
29天前
|
JSON 缓存 fastjson
一行日志引发的系统异常
本文记录了一行日志引发的系统异常以及作者解决问题的思路。
|
5天前
使用装饰器实现自动化日志系统
使用装饰器实现自动化日志系统
|
2月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
2月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
2月前
|
存储 监控 数据可视化
在Linux中,如何查看系统日志?
在Linux中,如何查看系统日志?
|
2月前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
|
2月前
|
XML Java API
Java日志通关(四) - Logback 介绍
作者日常在与其他同学合作时,经常发现不合理的日志配置以及五花八门的日志记录方式,后续作者打算在团队内做一次Java日志的分享,本文是整理出的系列文章第四篇。
下一篇
无影云桌面