使用 SLF 和 Logback 在 Java 中捕获和测试日志:简单指南

使用 slf 和 logback 在 java 中捕获和测试日志:简单指南

在Java项目开发中,日志记录对于调试和理解应用行为至关重要。有时,需要编写测试来验证特定日志消息是否在特定条件下生成。本文将演示如何结合使用SLF4j、Logback和自定义TestLogAppender来实现这一目标。

配置示例

我们将创建一个简单的服务,在发生异常时记录错误,并编写相应的测试来验证日志消息。

步骤一:添加Logback测试依赖

...    ch.qos.logback    logback-core    test...

步骤二:实现服务

立即学习“Java免费学习笔记(深入)”;

这是一个简单的服务,模拟一个任务失败并记录错误:

package com.example.loggingdemo;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class SimpleService {    private static final Logger logger = LoggerFactory.getLogger(SimpleService.class);    public void performTask() {        try {            // 模拟一个失败的任务            throw new IllegalArgumentException("模拟异常");        } catch (IllegalArgumentException e) {            logger.error("发生错误:{}", e.getMessage());        }    }}

步骤三:创建自定义TestLogAppender

该Appender在测试期间捕获日志消息,以便对其内容进行断言。

青柚面试 青柚面试

简单好用的日语面试辅助工具

青柚面试 57 查看详情 青柚面试

package com.example.loggingdemo;import ch.qos.logback.classic.spi.ILoggingEvent;import ch.qos.logback.core.AppenderBase;public class TestLogAppender extends AppenderBase {    private final StringBuilder logs = new StringBuilder();    @Override    protected void append(ILoggingEvent eventObject) {        logs.append(eventObject.getFormattedMessage()).append("n");    }    public String getLogs() {        return logs.toString();    }}

步骤四:编写测试

编写测试来验证日志输出:

package com.example.loggingdemo;import static org.assertj.core.api.Assertions.assertThat;import ch.qos.logback.classic.Logger;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Test;import org.slf4j.LoggerFactory;public class SimpleServiceTest {    private TestLogAppender logAppender;    private SimpleService simpleService;    @BeforeEach    public void setup() {        // 将TestLogAppender附加到Logger        logAppender = new TestLogAppender();        logAppender.start();        Logger logger = (Logger) LoggerFactory.getLogger(SimpleService.class);        logger.addAppender(logAppender);        // 初始化服务        simpleService = new SimpleService();    }    @Test    public void testPerformTaskLogsError() {        // 执行        simpleService.performTask();        // 断言        String logs = logAppender.getLogs();        assertThat(logs).contains("发生错误:模拟异常");    }}

重要提示: 务必启动您的日志Appender!

步骤五:运行测试

运行测试将验证SimpleService在发生异常时是否记录了预期的错误消息。

工作原理

自定义Appender: TestLogAppender通过重写Logback的AppenderBase的append方法来捕获日志消息。Logger配置: 在测试期间,我们将自定义Appender动态附加到目标Logger。日志断言: 测试中使用捕获的日志进行断言,验证特定消息或模式。

结论

通过这种方法,您可以有效地测试日志记录行为,确保您的应用程序按预期记录重要事件和错误。此方法适用范围广,可以扩展到更复杂的场景,例如测试日志级别或消息格式。 欢迎尝试并应用到您的项目中!

祝您编码愉快!

以上就是使用 SLF 和 Logback 在 Java 中捕获和测试日志:简单指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/285805.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
via浏览器如何设置快捷桌面 Via浏览器设置键盘快捷键教程
上一篇 2026年10月19日 12:52:01
c++怎么使用AddressSanitizer(ASan)调试内存问题_c++内存错误检测工具ASan使用指南
下一篇 2025年12月19日 08:22:43

相关推荐

  • 构造函数

    构造函数构造函数构造函数构造函数

    1. Java构造函数详解 Java中的构造函数是一段特殊的代码块,在创建类对象时自动执行。它用于初始化对象的成员变量,分配内存空间。 使用new关键字创建对象时,至少会调用一个构造函数;若未定义任何构造函数,编译器会自动提供一个默认构造函数。 构造函数的定义规则如下: 构造函数名必须与类名相同。构…

    2026年10月19日 • 用户投稿
    100
  • 使用VSCode开发React应用的调试配置与技巧

    配置VSCode调试React应用需创建launch.json并结合Chrome调试器,通过断点和插件提升开发效率。 在使用 vscode 开发 react 应用时,合理的调试配置和高效的操作技巧能显著提升开发体验。通过集成调试工具、正确设置断点以及利用插件增强功能,你可以快速定位问题并优化代码逻辑…

    2026年10月19日
    100
  • 曝奔驰中国区将关闭低效产线 取消“大锅饭”绩效

    曝奔驰中国区将关闭低效产线 取消“大锅饭”绩效曝奔驰中国区将关闭低效产线 取消“大锅饭”绩效曝奔驰中国区将关闭低效产线 取消“大锅饭”绩效曝奔驰中国区将关闭低效产线 取消“大锅饭”绩效

    为应对市场竞争和业绩下滑,奔驰中国区近期宣布一系列调整策略,力求提升效率,降低成本。 据报道,这一系列调整涉及研发、生产和销售三个方面。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 在研发方面,奔驰将上海研发中心作为试点,引入OKR考核制…

    2026年10月19日 • 用户投稿
    200
  • 小米汽车辟谣:不存在所谓“断轴”情况 坚决反对诋毁行为

    小米汽车辟谣:不存在所谓“断轴”情况 坚决反对诋毁行为小米汽车辟谣:不存在所谓“断轴”情况 坚决反对诋毁行为小米汽车辟谣:不存在所谓“断轴”情况 坚决反对诋毁行为小米汽车辟谣:不存在所谓“断轴”情况 坚决反对诋毁行为

    小米汽车回应su7“断轴”事件:并非质量问题,系超速行驶导致 近日,网络上流传小米SU7车辆发生“断轴”事故的消息,引发广泛关注。对此,小米汽车官方于2月9日发布声明进行辟谣。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 声明指出,经小米…

    2026年10月19日 • 用户投稿
    100
  • 使用 MinIO 构建本地环境:AWS SDK for Java Vigration 指南

    使用 MinIO 构建本地环境:AWS SDK for Java Vigration 指南使用 MinIO 构建本地环境:AWS SDK for Java Vigration 指南使用 MinIO 构建本地环境:AWS SDK for Java Vigration 指南使用 MinIO 构建本地环境:AWS SDK for Java Vigration 指南

    还在为 Spring Boot 启动时的 AWS SDK for Java V1 警告而烦恼吗? 本指南将帮助您轻松构建本地 Amazon S3 兼容开发环境,特别针对使用 AWS SDK for Java V2 的开发者。 我们将使用 MinIO 作为本地存储解决方案,避免繁琐的配置。 原文发表于…

    2026年10月19日 • 用户投稿
    200
  • 三星印度工厂500名员工静坐示威 抗议对三员工纪律处分

    三星印度工厂500名员工静坐示威 抗议对三员工纪律处分三星印度工厂500名员工静坐示威 抗议对三员工纪律处分三星印度工厂500名员工静坐示威 抗议对三员工纪律处分三星印度工厂500名员工静坐示威 抗议对三员工纪律处分

    三星印度工厂工人抗议纪律处分,数百人静坐罢工 据路透社等媒体2月8日报道,三星电子位于印度南部斯里佩鲁姆布杜尔的家电工厂发生工人静坐抗议事件。约500名员工留在工厂内拒绝工作,抗议公司对三名员工做出的纪律处分。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek …

    2026年10月19日 • 用户投稿
    200
  • Jenkins配置Coding Webhook

    Jenkins配置Coding WebhookJenkins配置Coding WebhookJenkins配置Coding WebhookJenkins配置Coding Webhook

    大家好,又见面了,我是你们的朋友全栈君。 今天我们来探讨如何配置Jenkins与Coding的Webhook。以下是详细的步骤: 安装插件 首先,我们需要安装必要的插件。安装完成后,需要重启Jenkins以确保插件生效。 创建项目 在Jenkins中创建一个新的项目,这里我们选择自由风格的项目。 在…

    2026年10月19日 • 用户投稿
    100
  • 同步器的代码示例

    同步器的代码示例同步器的代码示例同步器的代码示例同步器的代码示例

    本文提供四个Java并发同步器的代码示例及使用方法,帮助您理解Java多线程编程中的同步机制。 1. CountDownLatch:一次性屏障,协调线程 CountDownLatch允许一个或多个线程等待,直到其他线程完成一组操作。 import java.util.concurrent.Count…

    2026年10月19日 • 用户投稿
    000
  • 广达1月营收1425亿元新台币写同期新猷 评估美加征关税:影响不大

    广达1月营收1425亿元新台币写同期新猷 评估美加征关税:影响不大广达1月营收1425亿元新台币写同期新猷 评估美加征关税:影响不大广达1月营收1425亿元新台币写同期新猷 评估美加征关税:影响不大广达1月营收1425亿元新台币写同期新猷 评估美加征关税:影响不大

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 广达电脑公布1月合并营收达1,425.6亿元新台币,较去年同期增长95.5%,创下历史新高,并连续九个月营收突破千亿元大关。 这一亮眼成绩主要归功于蓬勃发展的人工智能(AI)服务器市场需求。 尽…

    2026年10月19日 • 用户投稿
    100
  • 从淘宝闪购到天猫优品 阿里为什么赞助苏超近一半球队

    从淘宝闪购到天猫优品  阿里为什么赞助苏超近一半球队从淘宝闪购到天猫优品  阿里为什么赞助苏超近一半球队从淘宝闪购到天猫优品  阿里为什么赞助苏超近一半球队从淘宝闪购到天猫优品  阿里为什么赞助苏超近一半球队

    7月5日,天猫优品正式宣布赞助苏超联赛连云港队,并冠名为“齐天大圣队”。在品牌官宣的创意口号中,“齐天大圣”被拆解为品牌宣言:“齐”是家电家居品类齐,“天”是天猫优品猫天天,“大”是国家补贴优惠大,“圣”是苏g连云港大胜。 这已是阿里系拿下的第六支苏超赞助球队。此前,淘宝闪购拿下常州队、支付宝绑定徐…

    2026年10月19日 • 用户投稿
    200
  • Java中接口和抽象类有什么区别?

    Java中接口和抽象类有什么区别?Java中接口和抽象类有什么区别?Java中接口和抽象类有什么区别?Java中接口和抽象类有什么区别?

    核心差异:接口: 定义方法规范,实现类必须实现所有方法。抽象类: 提供部分方法实现,可提供共同属性,支持多态。应用场景:接口: 需要定义一种规范,支持多实现。抽象类: 需要提供部分实现,不支持多继承。最佳实践:避免过度使用接口或抽象类。权衡利弊,选择最合适的实现方案。注重代码简洁和易理解性,保障代码…

    2026年10月19日 • 用户投稿
    100
  • 日月光董事长张虔生长子张能杰骤逝,享年46岁

    日月光董事长张虔生长子张能杰骤逝,享年46岁日月光董事长张虔生长子张能杰骤逝,享年46岁日月光董事长张虔生长子张能杰骤逝,享年46岁日月光董事长张虔生长子张能杰骤逝,享年46岁

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 日月光投控董事张能杰不幸逝世,享年46岁,引发业界震动。张能杰是董事长张虔生之子,此消息也令外界高度关注日月光投控的未来接班人安排。 公开资料显示,张能杰毕业于美国卫斯理大学心理学专业,自200…

    2026年10月19日 • 用户投稿
    100
  • Java中怎么查看一个类的字节码?

    Java中怎么查看一个类的字节码?Java中怎么查看一个类的字节码?Java中怎么查看一个类的字节码?Java中怎么查看一个类的字节码?

    Java字节码是平台无关的指令集,可通过JDK中的javap工具反汇编为汇编代码。通过分析字节码结构,可了解JVM执行机制、代码优化和逆向工程。javap可反汇编代码并显示常量池、字段和方法签名等信息。更高级的字节码分析工具可用于可视化代码执行流程,辅助深入分析和性能优化。不断实践和深入思考,将有助…

    2026年10月19日 • 用户投稿
    100
  • 168.5.1路由器恢复出厂 192.168.5.1系统日志查看(IPv6模式)

    168.5.1路由器恢复出厂 192.168.5.1系统日志查看(IPv6模式)168.5.1路由器恢复出厂 192.168.5.1系统日志查看(IPv6模式)168.5.1路由器恢复出厂 192.168.5.1系统日志查看(IPv6模式)168.5.1路由器恢复出厂 192.168.5.1系统日志查看(IPv6模式)

    路由器恢复出厂设置会清除所有自定义配置,包括wi-fi名称密码、管理密码、网络连接设置、端口转发规则、dhcp设置、ipv6配置及安全策略,使其恢复到初始状态。2. 查看192.168.5.1系统日志可排查网络故障,需登录管理界面,在系统工具或状态菜单中查找日志,重点关注错误和警告级别信息,结合时间…

    2026年10月19日 • 用户投稿
    100
  • 华为与深蓝深化合作 乾崑智驾加速全民智驾普及

    华为与深蓝深化合作 乾崑智驾加速全民智驾普及华为与深蓝深化合作 乾崑智驾加速全民智驾普及华为与深蓝深化合作 乾崑智驾加速全民智驾普及华为与深蓝深化合作 乾崑智驾加速全民智驾普及

    华为深蓝携手,加速全民智驾普及!2月9日,华为与深蓝汽车在重庆签署全面合作协议,深蓝汽车将大规模搭载华为乾坤智驾等解决方案,共同推动智能网联汽车发展,加速全民智驾普及。深蓝汽车预计2024年第四季度月交付量将超过3万辆,未来销量潜力巨大。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无…

    2026年10月19日 • 用户投稿
    100
  • 《深海迷航2》延期至2026年发售 不想让员工得奖金?

    《深海迷航2》延期至2026年发售  不想让员工得奖金?《深海迷航2》延期至2026年发售  不想让员工得奖金?《深海迷航2》延期至2026年发售  不想让员工得奖金?《深海迷航2》延期至2026年发售  不想让员工得奖金?

    krafton此前对其旗下工作室unknown worlds进行了管理层调整,包括解雇了联合创始人charlie cleveland和max mcguire,以及ceo ted gill。现在官方正式宣布,《深海迷航2》将推迟至2026年发布。 据彭博社记者Jason Schreier透露,Kraf…

    2026年10月19日 • 用户投稿
    100
  • 战略整合成汽车央企重要发展方向:东风汽车与长安汽车均筹划重组

    战略整合成汽车央企重要发展方向:东风汽车与长安汽车均筹划重组战略整合成汽车央企重要发展方向:东风汽车与长安汽车均筹划重组战略整合成汽车央企重要发展方向:东风汽车与长安汽车均筹划重组战略整合成汽车央企重要发展方向:东风汽车与长安汽车均筹划重组

    两大汽车央企——东风汽车和长安汽车,于2月9日晚间发布公告,宣布其控股股东正筹划与其他国资央企集团进行重组。东风汽车集团有限公司表示,重组可能导致公司间接控股股东变更,但实际控制人不会改变。长安汽车的间接控股股东中国兵器装备集团有限公司也发布了类似公告。 公告称,此次重组预计不会对公司日常运营产生重…

    2026年10月19日 • 用户投稿
    200
  • ECharts饼图点击事件如何获取具体数据?

    echarts饼图通过getzr().on(‘click’)获取具体数据 在echarts饼图中,通过getzr().on(‘click’)方法可以获取点击事件,但只能获得target是piepiece的对象,无法直接获取具体数据。 对于contain…

    2026年10月19日
    100
  • VSCode如何通过扩展实现物联网开发 VSCode IoT设备模拟器的集成方法

    VSCode如何通过扩展实现物联网开发 VSCode IoT设备模拟器的集成方法VSCode如何通过扩展实现物联网开发 VSCode IoT设备模拟器的集成方法VSCode如何通过扩展实现物联网开发 VSCode IoT设备模拟器的集成方法VSCode如何通过扩展实现物联网开发 VSCode IoT设备模拟器的集成方法

    #%#$#%@%@%$#%$#%#%#$%@_e2fc++805085e25c9761616c00e065bfe8物联网开发常用的核心扩展包括:platformio ide用于嵌入式代码编写与烧录,azure iot tools或aws iot toolkit用于设备模拟与云端交互,c/c++扩展提…

    2026年10月19日 • 用户投稿
    600
  • 【变更】长安汽车:控股股东拟发生变更 但不影响实际控制人

    【变更】长安汽车:控股股东拟发生变更 但不影响实际控制人【变更】长安汽车:控股股东拟发生变更 但不影响实际控制人【变更】长安汽车:控股股东拟发生变更 但不影响实际控制人【变更】长安汽车:控股股东拟发生变更 但不影响实际控制人

    汽车行业要闻速递:长安、东安控股股东拟变更,福田新能源汽车销量激增 近日,汽车行业发生多项重要事件:长安汽车和东安动力的控股股东均拟发生变更,而福田汽车则公布了其新能源汽车销量大幅增长的喜人消息。 1. 长安汽车:控股股东变更不影响实际控制人 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免…

    2026年10月19日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信