关于日志的那些事儿

#coding
目录

这篇短文整理了关于日志的一些内容,皓哥要求的【目标是一篇“引经据典“的,“全面系统“的对日志的介绍】。结合一些参考链接和以往的经验,主要对软件开发过程中日志相关的知识进行梳理和学习。

日志的定义

先说说咱们日常生活中的日志,就是日记的另一种说法。

日记是以日期为排列顺序的笔记。人们用日记来记录天气、事件一直到个人的心理感受、思想深处。日记可以是记录将要做的事情的,也可以记录已经发生的事情和心情。

在计算机领域,日志文件的定义如下:

日志文件(logfile)是一个记录了发生在运行中的操作系统或其他软件中的事件的文件,或者记录了在网络聊天软件的用户之间发送的消息。日志记录(Logging)是指保存日志的行为。

日志的意义

记录日志是软件开发中很重要的一部分。编写良好的日志代码能为软件提供快速的诊断信息和良好的存储结构。我们可以通过对记录的日志进行分析来支撑一些其他的功能,例如解析mysql的binary log来同步数据,通过日志分析用户行为,系统某功能的访问频率,通过日志排查程序的BUG等等。

日志的类型

日志的格式

每条日志都要记录发生的时间、级别、日志内容、错误码、以及对应代码的位置,存储在文本文件或者数据库中。

service=“listener” thread=125 customerid=776622 ip=34.124.233.12 queryid=45 ```

日志的级别

不同的日志框架对日志的分类略有差异,通常来说,日志可以被分为以下六个级别,通过配置来输出对应级别的日志

日志归档

根据天数或者文件大小产生新的文件,对日志进行滚动归档,压缩保存。

日志的性能

记录日志是软件开发必不可少的环节,必须考虑日志的性能带来的问题,举两个例子:

logger.debug("Entry number: " + i + " is " +  String.valueOf(entry[i])); 
logger.debug("Entry number: {} is {}", i, entry[i]);

上面两个语句输出的效果是一样的,但是性能却相差两个数量级,在关闭DEBUG日志时,它们的开销就不一样了,主要的影响在于字符串转换和字符串拼接上,无论是否生效,前者都会将变量转换为字符串并进行拼接,而后者则只会在需要时执行这些操作。

日志框架

列举一些 Java 程序里常用的日志框架

最佳实践

参考文献


评论区