日志的作用

摘要:
此外,最好用英文打印日志,以防止在不支持中文时打印乱码。正确控制日志输出也有助于提高程序性能。最好在输出日志之前判断日志级别。正确使用滚动日志并定期清除旧文件是有益的。在这种大小的日志文件中找到解决问题的有用信息也是一项挑战。

1.1 日志的作用

一般程序日志出自下面几个方面的需求:
1. 记录用户操作的审计日志,甚至有的时候就是监管部门的要求。
2. 快速定位问题的根源
3. 追踪程序执行的过程。
4. 追踪数据的变化
5. 数据统计和性能分析
6. 采集运行环境数据
一般在程序上线之后,一旦发生异常,第一件事就是要弄清楚当时发生了什么。用户当时做了什么操作,环境有无影响,数据有什么变化,是不是反复发生等,然后再进一步的确定大致是哪个方面的问题。确定是程序的问题之后再交由开发人员去重现、研究、提出解决方案。这时,日志就给我们提供了第一手的资料。

1.2 撰写日志的要求

既然撰写日志是有需求,而且也能在未来帮助我们提高工作效率的事情,长远来看是非常有利的一件事情。因此我们应该在自己开发的程序中符合规范的撰写日志,在写日志时要注意以下的问题。

1.2.1 日志的可读性

日志时给人读的,不仅仅是让自己明白,也要让没有接触过我们源代码的其他程序员也能够一目了然。有的同事在日志中打印特殊的标识符号,例如“++++++++++”, “===========”,“—————”,这些符号令人眼花缭乱。这是一种不好的编程习惯。
另外,把日志分类输出到不同的文件也有利于我们排除干扰,迅速找到我们需要的信息。而且,最好在打印日志时输出英文,防止中文不支持而打印出乱码的情况。

1.2.2 日志的性能

无论我们把日志写到文件还是数据库,都需要消耗IO资源。适当的控制日志的输出也有利于提高程序的性能。例如:尽量避免在在大的循环中打印意义不大的日志内容。输出日志之前最好能判断日志的级别(例如. debug前先调用isDebugEnabled()作出判断)。

1.2.3 占用磁盘空间

通常,我们都是把日志写入磁盘上的日志文件中。适当的使用滚动日志并且定时清除旧文件是有好处的。我见过这样一个例子,程序运行几次后就跑不起来了,前几次都是正常的。怎么都想不明白程序有什么问题,最后才发现居然是日志文件占满了磁盘空间。在实际的应用中出现上G的日志文件也往往不少见。要在这样规模的日志文件中找出对解决问题有用的信息也是一大挑战。

1.2.4 日志的时效性

有的时候我们并不能及时的发现问题。需要追溯之前的日志。所以我们是需要保留一段时间以内的日志便于追溯。
1.2.5 日志级别
通常我们在产品环境中日志的级别都在INFO以上,所以我们必须保证在这样的情况下程序仍然能够输出足够我们作出判断的信息。

1.2.6 日志内容

我们在写日志的时候,需要注意输出适当的内容。首先,尽量使用业务相关的描述。我们的程序是实现某种业务的,那么就最好能描述清楚这个时候走到了业务过程的哪一步。其次,避免在日志中输出一些敏感信息,例如用户名和密码。以及,要保持编码的一致。如果不能保证就尽量使用英文而不是中文。这样当我们拿到日志之后就不会因为看到一堆乱码而不知所云了。

1.2.7 日志格式

常见的日志格式中对于每一条日志应含有的信息包括日期、时间、日志级别、代码位置、日志内容、错误码等信息。下面是一个工作中的日志文件的一部分内容:

原文:  https://blog.csdn.net/monk1992/article/details/82687182

免责声明:文章转载自《日志的作用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java源码阅读-Integer(基于jdk1.8)VBScript进阶篇一下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

如何设置Navicat的显示字体与字体大小?

方法/步骤打开Navicat点击菜单,再选择在界面,点击下的设置网格字体和大小设置编辑器字体和大小设置命令列界面字体和大小设置ER图表字体和大小,最后点击END...

戴尔服务器R740-iDRAC管理卡远程安装系统

Dell服务器R740 iDRAC管理卡安装系统1.方案部署:1.服务器配置名称配置备注CPU 2核心内存128GSwap=128G硬盘2T*8RAID5=12T II。设置iDRAC管理卡地址和连接:iDRAC功能默认关闭,需要在BIOS中启用。由于这是一项测试,默认情况下使用浏览器(Google浏览器)访问iDRAC管理地址,Calvin可以在此处设置新...

Redis使用

配置文件中的数据库值):1.将密钥从当前数据库移动到指定数据库:1.删除当前数据库中的所有密钥:1.删除所有数据库中的全部密钥:12.基本的Redis操作可以包括任何数据。...

不同版本的Unity要求的NDK版本和两者对应关系表(Unity NDK Version Match)

下面介绍方法来获取Unity需要的ndk版本。Unity2019和Unity2020要求的NDK19.0下载地址:https://dl.google.com/android/repository/android-ndk-r19-windows-x86_64.zip手动修改ndk版本号这个方法是修改ndk的属性文件,把版本号修改为unity要求的版本号,我这样...

[RTOS]--uCOS、FreeRTOS、RTThread、RTX等RTOS的对比之特点

本博客将详细介绍这些RTOS的特点。以下内容来自官方网站或官方手册Feature的谷歌翻译,由我进行了一些调整,没有任何主观因素。1.FreeRTOS FreeRTOS是一个为小型嵌入式系统设计的可扩展实时内核。亮点包括:小包装。免费RTOS调度器免费嵌入式软件源代码。免版税。抢占式、协作式和混合式配置选项以及时间切片是可选的。SafeRTOS衍生产品提供高...

EMQ X 插件持久化系列 (五)MySQL MQTT 数据存储

本文使用CentOS 7.2中的一个实际示例来说明如何通过MySQL存储相关的MQTT数据。要安装和验证MySQL服务器,请参阅MySQL官方文档或使用Docker下载并安装MySQL服务器。本文使用MySQL 5.6版。如果读者使用MySQL 8.0或更高版本,则应根据EMQX Unable to Connect to MySQL8.0教程配置MySQL。...