五个方式提高程序员的日志质量
五个方式提高程序员的日志质量
最近涌现出各种各样能帮助程序员理解日志的新工具,有类似 Scribe、Logstash 这样的开源项目,也有类似 Splunk 的预付费工具,还有托管服务如 SumoLogic 和 PaperTrail。这些工具的共同点是对日志数据进行清洗,在大量日志中提取一些更有价值的文件。
提高日志质量的五大技巧
但有一件事这些工具却爱莫能助,因为它们完全依赖你实际投入的日志数据,而如何保证数据的质量和数量则需要用户自行完成。因此,在关键时刻,如果你需要基于部分或者遗漏日志做代码调试时,事情可能会变得非常棘手。
为了减少这种情况发生,在这里分享五个建议,在你记录日志时最好能铭记于心:
1. 你好,我的(线程)名字是
正如 Ringo,线程名称这个属性是 Java 中最被低估的方法之一。其原因是线程名称大部分是描述性的。然而问题同样出现在这里,类似人们自己,起名时通常会被赋予一定的意义。而在多线程日志中,线程名同样挥着关键作用。通常情况下,大多数日志框架会记录当前所调用的线程名称。可悲的是,我们通常会看到 http-nio-8080-exec-3 这种名字,简单地由线程池或容器进行分配。
出于某种原因,我们曾不止一次地听过这种误解——线程名称是不可变的。与之相反,在日志中,线程名称占据基本主要地位,你应该确保能正确使用。比如将它与具体情境结合起来,例如 Servlet 的名字、任务相关,或者一些动态语境如用户或消息 ID。
这样的话,代码接口应该是这样:
Thread.currentThread().setName(ProcessTask.class.getName() + “: “+ message.getID);
更先进的版本将被加载到当前线程的线程局部变量,配置 log appender,并自动将其添加到日志条目。
当多个线程写入服务器日志,但你需要集中在单一线程上时,这将会非常有用。如果你在一个分布式 /SOA 环境下运行,更能看到它得天独厚的优势。
2. 分布式的标识符
在 SOA 或消息驱动的架构,任务执行很可能跨多台机器。当处理这种环境下的故障时,连接相关机器和它们的状态将是了解具体情况的关键。大多数日志分析器会将这些日志信息分组,假设你为它们提供了唯一标识,它们便可以作为实际日志消息的一部分。
从设计的角度出发,这意味着,从进入系统到操作完成,每一个入站操作应该有其唯一的 ID 对应。请注意,一个持久的标识符,如用户 ID 可能不是一个好容器。在记录日志文件的过程中,用户可能有多个操作,这将使得隔离特定流更加困难。UUIDs 可能是个不错的选择。它的值可以被加载到实际线程名称或者作为 TLS-thread 的局部储存器。
3. 不要使用文本+驱动器,不要日志+循环
很多时候,你会看到一段代码在紧密的循环中运行,并执行相应的日志操作。基本假设是,该代码运行的次数是有限的。
很可能运行情况非常良好。但是当代码得到意外输入时,循环可能并不会中断。在这种情况下,你不只是处理一个无限循环「虽然这样已经很糟糕了」,你正在处理的代码正将无限量的数据写到磁盘或网络。
在单机场景中它可能会造成一台服务器崩溃,而在分布式场景中,被影响的则是整个集群。因此如果可能,不要在紧密循环中记录日志。捕获错误时,这一点尤其如此。
下面这个例子,记录了一个 while 循环中的异常:
void read() {
while (hasNext()) {
try {
readData();
} catch {Exception e) {
// this isn’t recommend
logger.error(“error reading data“, e);
}
}
}
如果 readData 抛出异常,而 hasNext 返回值为 true,这里将会写入无限量的日志数据。要解决这个问题的方法是确保不会记录这一切:
void read() {
int exceptionsThrown = 0;
while (hasNext()) {
try {
readData();
} catch {Exception e) {
if (exceptionsThrown logger.error(“error reading data", e);
exceptionsThrown++;
} else {
// Now the error won’t choke the system.
}
}
}
}
另一种方法是从循环中移除日志记录,并保存第一/最后一个异常对象并在其它地方记录。
4. 未捕获的处理程序
Westeros 有最后一道防御墙,而你有 Thread.uncaughtExceptionHandler。因此,尽量使用它们。如果没有安装这些处理程序,在异常抛出时,你只能获得很少有价值的上下文,同时你也无法控制在结束之前你已经将其记录,并确定记录的位置。
请注意,即使在未捕获的异常处理程序,看起来你没有任何办法访问线程中(已终止)的任何变量,你仍然可以获得实际线程对象的引用。如果你坚持# 1步,你仍然会得到一个有意义的thread.getName()值可记录。
5. 捕获外部调用
每当调用一个外部的 API, JVM 异常的几率将大大增加。这包括 Web 服务、 HTTP、 DB、 文件系统、操作系统和任何其他 JNI 调用。认真对待每个调用,因为它随时会爆炸 「它很有可能发生在同样的点」。
大多数情况下,外部 API 故障的原因是意外输入,日志中对其记录是修复代码的关键。
在这一点上,你可以选择不记录错误,只是抛出异常也可以。在这种情况下,只要收集到调用的相关参数,并将其解析为异常错误信息。
只要确保异常被捕获并记录在更高级别的堆栈调用即可。
免费领取LAMP兄弟连原创PHP视频教程光盘/《细说PHP》精要版,详情咨询官网客服:
http://www.lampbrother.net
【兄弟连IT教育】学PHP、Linux、HTML5、UI、Android等视频教程(课件+笔记+视频)!
网盘教程下载:http://pan.baidu.com/s/1mg8ANMg
以上就介绍了五个方式提高程序员的日志质量,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

“你的组织要求你更改PIN消息”将显示在登录屏幕上。当在使用基于组织的帐户设置的电脑上达到PIN过期限制时,就会发生这种情况,在该电脑上,他们可以控制个人设备。但是,如果您使用个人帐户设置了Windows,则理想情况下不应显示错误消息。虽然情况并非总是如此。大多数遇到错误的用户使用个人帐户报告。为什么我的组织要求我在Windows11上更改我的PIN?可能是您的帐户与组织相关联,您的主要方法应该是验证这一点。联系域管理员会有所帮助!此外,配置错误的本地策略设置或不正确的注册表项也可能导致错误。即

Windows11将清新优雅的设计带到了最前沿;现代界面允许您个性化和更改最精细的细节,例如窗口边框。在本指南中,我们将讨论分步说明,以帮助您在Windows操作系统中创建反映您的风格的环境。如何更改窗口边框设置?按+打开“设置”应用。WindowsI转到个性化,然后单击颜色设置。颜色更改窗口边框设置窗口11“宽度=”643“高度=”500“>找到在标题栏和窗口边框上显示强调色选项,然后切换它旁边的开关。若要在“开始”菜单和任务栏上显示主题色,请打开“在开始”菜单和任务栏上显示主题

在Windows11上的显示缩放方面,我们都有不同的偏好。有些人喜欢大图标,有些人喜欢小图标。但是,我们都同意拥有正确的缩放比例很重要。字体缩放不良或图像过度缩放可能是工作时真正的生产力杀手,因此您需要知道如何对其进行自定义以充分利用系统功能。自定义缩放的优点:对于难以阅读屏幕上的文本的人来说,这是一个有用的功能。它可以帮助您一次在屏幕上查看更多内容。您可以创建仅适用于某些监视器和应用程序的自定义扩展配置文件。可以帮助提高低端硬件的性能。它使您可以更好地控制屏幕上的内容。如何在Windows11

屏幕亮度是使用现代计算设备不可或缺的一部分,尤其是当您长时间注视屏幕时。它可以帮助您减轻眼睛疲劳,提高易读性,并轻松有效地查看内容。但是,根据您的设置,有时很难管理亮度,尤其是在具有新UI更改的Windows11上。如果您在调整亮度时遇到问题,以下是在Windows11上管理亮度的所有方法。如何在Windows11上更改亮度[10种方式解释]单显示器用户可以使用以下方法在Windows11上调整亮度。这包括使用单个显示器的台式机系统以及笔记本电脑。让我们开始吧。方法1:使用操作中心操作中心是访问

在iOS17中,Apple为其移动操作系统引入了几项新的隐私和安全功能,其中之一是能够要求对Safari中的隐私浏览选项卡进行二次身份验证。以下是它的工作原理以及如何将其关闭。在运行iOS17或iPadOS17的iPhone或iPad上,如果您在Safari浏览器中打开了任何“无痕浏览”标签页,然后退出会话或App,Apple的浏览器现在需要面容ID/触控ID认证或密码才能再次访问它们。换句话说,如果有人在解锁您的iPhone或iPad时拿到了它,他们仍然无法在不知道您的密码的情况下查看您的隐私

http状态码520是指服务器在处理请求时遇到了一个未知的错误,无法提供更具体的信息。用于表示服务器在处理请求时发生了一个未知的错误,可能是由于服务器配置问题、网络问题或其他未知原因导致的。通常是由服务器配置问题、网络问题、服务器过载或代码错误等原因导致的。如果遇到状态码520错误,最好联系网站管理员或技术支持团队以获取更多的信息和帮助。

著名的激活脚本MAS2.2版本重新支持数字激活,方法源于@asdcorp及团队,MAS作者称之为HWID2。https://github.com/massgravel/Microsoft-Activation-Scripts下载gatherosstate.exe(非原版,已改造),带参数运行它,生成门票GenuineTicket.xml。先看一下原先的方法:gatherosstate.exePfn=xxxxxxx;DownlevelGenuineState=1再对比一下最新方法:gatheros
![如何在 Windows 11 上隐藏和取消隐藏文件夹 [3 种方式]](https://img.php.cn/upload/article/000/887/227/169542942766265.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
隐藏文件夹是保持桌面井井有条的好方法。也许您想让您的个人文件或一些客户详细信息远离窥探。不管是什么,在必要时将它们收起来并取消隐藏的能力是一个很大的节省。简而言之,这些隐藏文件不会显示在主菜单中,但它们仍然可以访问。这非常简单,不应该花费您太多时间。如何在Windows11中隐藏文件夹?1.使用文件资源管理器打+键打开文件资源管理器。WindowsE找到要隐藏的文件夹,右键单击它,然后选择属性。导航到常规选项卡,选中隐藏框,单击应用,然后单击确定。在下一个对话框中,选中将更改应用于此文件夹,子文
