《代码整洁之道》 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日志并进行多维度分析。
相关文章
|
6月前
|
数据采集 自然语言处理 前端开发
让大模型分析csdn文章质量 —— 提取csdn博客评论在文心一言分析评论区内容
让大模型分析csdn文章质量 —— 提取csdn博客评论在文心一言分析评论区内容
99 6
如何撰写一份清晰有效的说明文档
在软件开发、产品开发以及各种工作任务中,编写一份清晰有效的说明文档是至关重要的。一份好的说明文档能够帮助读者理解事物的背景、目标和操作步骤,提高工作效率,减少沟通成本。
|
6月前
|
存储 人工智能 安全
面向企业的 ChatGPT 究极手册:第七章到第八章
面向企业的 ChatGPT 究极手册:第七章到第八章
151 0
面向企业的 ChatGPT 究极手册:第七章到第八章
|
6月前
|
SEO
技术写作:漏斗内容策略、认知博客、支柱内容、研究报告、通用门控内容、电子书和教程
顶部漏斗是指客户旅程中的认知阶段,他们第一次接触到企业或产品。在这个阶段,他们意识到自己存在问题,并开始寻找信息或解决方案。此阶段的内容旨在通过提供与他们的问题相关的解决方案或有价值的信息来吸引潜在客户的注意力和兴趣。这种内容通常是广泛而丰富的,而不是针对产品的。其目的是在建立信任和品牌权威的同时,告知和教育受众。
102 5
|
6月前
|
机器学习/深度学习 人工智能 安全
面向企业的 ChatGPT 究极手册:第九章到附录 A
面向企业的 ChatGPT 究极手册:第九章到附录 A
112 0
|
程序员 测试技术 API
程序员不撰写代码注释和文档的十大理由
在软件开发的世界中,撰写代码注释和文档通常被认为是一项重要的工作,它可以帮助其他开发者理解你的代码,更容易地维护和扩展它。然而,在实际操作中,很多程序员却选择不写注释或文档。以下列出了程序员们在实践中经常提到的十大理由,这些理由不仅揭示了他们对于撰写文档和注释的观点,也反映出软件开发行业中一些深层次的问题。
158 1
程序员不撰写代码注释和文档的十大理由
|
算法 索引
算法创作 | 0到n-1中缺失的数字问题解决方法
算法创作 | 0到n-1中缺失的数字问题解决方法
99 0
编程基本功:做自解释的测试文档
编程基本功:做自解释的测试文档
61 0
编程基本功:做自解释的测试文档