老板下了死命令,要把日志系统切换到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


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
2月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
350 122
基于docker搭建监控系统&日志收集
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
5月前
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
355 1
|
2月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
282 2
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
3561 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
4月前
|
存储
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
9月前
|
存储 前端开发 数据可视化
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
3355 70
Grafana Loki,轻量级日志系统
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
386 5
|
8月前
|
存储 消息中间件 缓存
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
357 1
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
|
8月前
|
存储 JSON Go
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
171 10

热门文章

最新文章

下一篇
oss云网关配置