《代码整洁之道》 108 109页缺失翻译

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 《代码整洁之道》中文电子版 少了两页 本人帮翻译出来 仅供参考 有错误的地方多批评指正by 明明如月 QQ 605283073

附  英文版 中文版 电子书  




360网盘: http://yunpan.cn/c3ISX4cRsqcMU  访问密码 67b9





合我们的利益诉求。


这半句为了和上一页接上。但是不够特别通顺。这一段最后一句话重新翻译:


测试第三方代码并非我们的职责所在,但是为我们使用到第三方代码写测试代码对我们最有好处。


      假如我们并不知道怎么使用我们的第三方库。我们可能需要花费一天或者两天(甚至更长)的时间来阅读其文档才搞懂怎样去使用它。然后我们利用第三方代码来编写我们的代码,并判断它是否按照我们设想的来执行。由此我们停滞在尝试找出bug是出自我们的代码还是第三方代码里面的漫长的调试阶,就不足为奇了。


      学习第三方代码不容易。整合第三方代码也很难。学习的同时又整合代码难度更是双倍。如果我们另辟蹊径怎样?不是实验和尝试在我们产品代码中加入新的东西,而是去写测试来加深我们对第三方代码的理解。Jim Newkirk称这种测试为学习性测试。


      因为我们想在我们的应用上使用第三方库,所以在学习性测试中我们称第三方(库)为API。我们本质上是通过可控的实验来验证我们对API的理解。实验重点关注我对API本身以外的需求。


8.3学习log4j


 比起我们自己定制日志记录器,我们更倾向于使用apache公司的log4j包。我们下载log4j包,并打开其介绍功能的文档页面。在没有充分阅读文档的情况下,我们写第一个测试用例,期待它能够写“hello”这个单词到控制台。


@Test

public voidtestLogCreate() {

Logger logger =Logger.getLogger("MyLogger");

logger.info("hello");

}



      运行它的时候,日志记录器产生一个错误,提示我们需要一个叫Appender(日志目的地)的东西。稍微读了一下文档,我们发现有一个叫ConsoleAppender的类。所以我们创建一个ConsoleAppender ,看看这样是否已经解开了输入到控制台的秘密。


@Test

public voidtestLogAddAppender() {

Logger logger =Logger.getLogger("MyLogger");

ConsoleAppender appender= new ConsoleAppender();

logger.addAppender(appender);

logger.info("hello");

}



这次我们发现Appender并没有输出流。奇怪—逻辑上它应该有一个输出流才对。通过在谷歌上一番搜索后,我们尝试对代码作如下修改:


@Test

public voidtestLogAddAppender() {

Logger logger =Logger.getLogger("MyLogger");

logger.removeAllAppenders();

logger.addAppender(newConsoleAppender(

newPatternLayout("%p %t %m%n"),

ConsoleAppender.SYSTEM_OUT));

logger.info("hello");}



      问题搞定了,一个包含“hello”的日志信息在控制台出现了!似乎很奇怪我们必须告诉ConsoleAppender让它写入到控制台。


有趣的是,当我们移除ConsoleAppender.SystemOut这个参数,“hello”仍然可以打印



出来。但是当我们移除PatternLayout(格式化布局器),它仍然提示我们缺少输出流。这非常奇怪。


如果我们更仔细的阅读文档会发现,默认的ConsoleAppender构造器是“未配置(输出流)”的,但是这点并不显眼也没啥益处。在log4j中,这点更像是一个bug或者至少也是前后矛盾的。


通过更多的谷歌搜索以及阅读文档和测试,我们最终以列表8-1代码来结束这个示例。


我们已经对log4j的工作方式有了一些了解。我们将这部分知识展现在一个简单的单元测试集中。


Listing 8-1


LogTest.java


public class LogTest {

private Logger logger;

@Before

public void initialize() {

logger = Logger.getLogger("logger");

logger.removeAllAppenders();

Logger.getRootLogger().removeAllAppenders();

}

@Test

public void basicLogger() {

BasicConfigurator.configure();

logger.info("basicLogger");

}

@Test

public void addAppenderWithStream() {

logger.addAppender(new ConsoleAppender(

new PatternLayout("%p %t %m%n"),

ConsoleAppender.SYSTEM_OUT));

logger.info("addAppenderWithStream");

}

@Test

public void addAppenderWithoutStream() {

logger.addAppender(new ConsoleAppender(

new PatternLayout("%p %t %m%n")));

logger.info("addAppenderWithoutStream");

}

}




既然现在我们已经了解了怎样对一个简单的控制台日志输出器初始化,那么我们就可以将其封装到我们自己的日志输出器中,以便应用中其他部分能够与log4j边界接口隔离开来。

————————————————

版权声明:本文为CSDN博主「明明如月学长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/w605283073/article/details/50353014

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5月前
|
SQL IDE JavaScript
"揭秘高效代码Review秘籍:如何像侦探一样挖掘隐藏错误,提升团队编程实力,你不可错过的实战指南!"
【8月更文挑战第20天】代码Review是软件开发中提升代码质量与团队协作的关键环节。本文详细介绍高效代码Review流程:从明确范围与标准开始,到逐行审查与工具辅助,再到积极沟通与闭环管理,辅以示例确保清晰易懂。通过实践这些步骤,不仅能减少错误,还能促进知识共享,为构建高质量软件打下坚实基础。
88 2
|
8月前
|
SEO
技术写作:漏斗内容策略、认知博客、支柱内容、研究报告、通用门控内容、电子书和教程
顶部漏斗是指客户旅程中的认知阶段,他们第一次接触到企业或产品。在这个阶段,他们意识到自己存在问题,并开始寻找信息或解决方案。此阶段的内容旨在通过提供与他们的问题相关的解决方案或有价值的信息来吸引潜在客户的注意力和兴趣。这种内容通常是广泛而丰富的,而不是针对产品的。其目的是在建立信任和品牌权威的同时,告知和教育受众。
111 5
|
8月前
|
搜索推荐 算法 UED
技术文档指南:版本说明、网站文案、FAQ、案例研究与内容优化
Release Notes 通常是软件文档的一部分,是在新产品发布时提供给用户的简短、高级摘要。它们包含有关更新的重要信息,包括新功能、增强功能、错误修复,通常还包括已知问题。每个版本说明与特定软件版本相关联,并帮助用户了解该特定版本中可以期待的哪些更改或改进。有效的版本说明将以用户为中心的方式讨论新功能或增强功能,识别用户需要执行的任何操作,突出已知问题和解决方法,并在必要时包含指向更详细信息的链接。它使用户能够更有效地使用软件并解决潜在问题。
264 0
|
程序员 测试技术 API
程序员不撰写代码注释和文档的十大理由
在软件开发的世界中,撰写代码注释和文档通常被认为是一项重要的工作,它可以帮助其他开发者理解你的代码,更容易地维护和扩展它。然而,在实际操作中,很多程序员却选择不写注释或文档。以下列出了程序员们在实践中经常提到的十大理由,这些理由不仅揭示了他们对于撰写文档和注释的观点,也反映出软件开发行业中一些深层次的问题。
167 1
程序员不撰写代码注释和文档的十大理由
|
算法 索引
算法创作 | 0到n-1中缺失的数字问题解决方法
算法创作 | 0到n-1中缺失的数字问题解决方法
109 0
|
测试技术
【解决方案 二十一】系统专业名词梳理及释义
【解决方案 二十一】系统专业名词梳理及释义
133 0
|
SQL 人工智能 数据挖掘
ChatGPT4 给出数据库开发者最容易犯的 10 个错误和解决方案
近期 ChatGPT4 发布,作为数据库领域的开发者,也是 10 年老 DBA,也是迫不及待体验了一把。 ChatGPT 4 目前是付费使用,使用次数也有限制,门槛更高,API 调用费用是 ChatGPT 3.5 的 15 倍,网站也经常登录不上。 我让 ChatGPT4 列举出【数据库开发者最容易犯的 10 个错误和解决方案】 ChatGPT4 的原文回答如下:
620 0
ChatGPT4 给出数据库开发者最容易犯的 10 个错误和解决方案
编程基本功:做自解释的测试文档
编程基本功:做自解释的测试文档
64 0
编程基本功:做自解释的测试文档
|
前端开发
带你读书之“红宝书”:第三章 语法基础(上)之 关键词后续
带你读书之“红宝书”:第三章 语法基础(上)之 关键词后续
107 0
带你读书之“红宝书”:第三章 语法基础(上)之 关键词后续
|
程序员
编程基本功:找到问题的合理解释,才算解决问题
编程基本功:找到问题的合理解释,才算解决问题
97 0

热门文章

最新文章