从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE
  • JavaWeb
  • Spring
  • 主流框架
  • 学习网课的心得
  • 输入法
职场系列
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE
  • JavaWeb
  • Spring
  • 主流框架
  • 学习网课的心得
  • 输入法
职场系列
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

  • JavaEE

    • JavaEE概念

    • Ant

    • 日志

      • 日志介绍
        • 什么是日志
        • 日志的作用
        • 一个日志文件会记录什么
        • 日志的级别
        • 日志管理
        • 日志的缺点
        • 相关阅读
      • print大法
      • 常见的日志框架-简单介绍
      • 一个日志框架的设计
      • JDK Logging
      • log4j2 笔记
      • 日志的一些小技巧
      • 日志系统小结
    • Junit

    • JDBC

    • XML和JSON

    • Java
  • JavaWeb

  • Spring

  • 主流框架

  • 韩顺平

  • Java
  • Java
  • JavaEE
  • 日志
2022-12-01
目录

日志介绍

# 日志介绍

不管是什么编程语言,都需要用到日志。

# 什么是日志

日志,和日记类似,都是记录东西的。现实生活中,很多行业都有用到日志:

  • 在航海🚢中,有航海日志,“航海日志是船舶日常工作的记录,检查船员值班责任的依据,也是处理海事时所必须引用、且能在法律上起作用的原始资料。-百度百科”
  • 在飞行领域✈,有黑匣子,万一发生了空难,可以通过黑匣子分析为何发生了空难,发生的前因后果。“现代商用飞机一般安装两个黑匣子,分别是“驾驶舱语音记录器”和“飞行数据记录器”,用于航空器事故的调查、维修和飞行试验- 百度百科”
  • 即使是个人🧑,也可以写日志,作为对自己的生活的记录和总结等,便于回顾
  • ....................

通过日志,可以很方便的回溯发生过的事情,方便未来定位问题和总结。

‍

# 日志的作用

在程序员的工作中,日志是非常重要的。可以说,如果系统遇到了什么问题,大部分都得靠日志去定位和解决

程序运行起来以后, 基本上就是一个黑盒子,如果程序的行为和预料的不一致,那就是出现Bug了,如何去定位这个Bug 呢?

如果没有记录日志,那么对于已经发生过的事情,我们是无法得知其内部是如何变化的,例如变量的变化情况,数据库的执行情况等等;这时候如果根据问题发生从场景,来复现这个问题的话,还不一定能复现出来,因为我们不能准确的定位到为什么发生了这个问题。

有时候是用户操作失败了,但用户记错了,那么要复现问题就难上加难了……

所以,没有记录日志的话,遇到难排查的问题,基本就炸了 💥,特别是遇到一些紧急和重大的问题的时候

‍

笔者曾负责一个电商系统,在该系统内,几乎用户的任何关键的操作,都会记录在日志里。这样,当客户反馈有什么问题的时候,就可以通过日志去定位用户操作到哪一步了,后台有什么错误输出,以此来复现和解决

‍ 这里也引用看到的一个总结:

在我们开发一些业务比较复杂的程序时,开发者们往往在重要时刻记录一些日志,这些日志在排查问题的时候,跟踪调用流程时特别有用。因为一旦程序出现问题,如果没有日志,又不能让用户去复现问题的话,我们往往需要大量时间去一步步排查和跟踪,如果有业务日志,就可以根据日志整理出一个业务处理链条,顺着这个业务链条就可以就可以得到程序处理的过程,定位并复现问题。 --《Electron实战》第188页,刘晓伦著   ‍

‍日志的意义与价值,,用一些专业术语来说就是:

  • 在开发调试阶段:日志系统有助于更快的定位问题。
  • 在应用运维阶段:日志系统有助于记录大部分的异常信息,通过收集日志信息可以对系统的运行状态进行实时监控预警。
  • 在数据分析阶段:日志中通常包含大量的用户数据,包括点击行为、兴趣偏好等,基于这些数据可以对用户进行“画像”,进而助力战略决策。随着大数据技术日渐成熟,海量日志分析已经在互联网公司得到广泛应用。

# 一个日志文件会记录什么

一个日志,笔者根据经验认为,应该记录如下内容:

  1. 用户的操作记录:当用户遇到问题的时候,除了通过用户提供的描述来分析问题,也应该通过日志排查是否用户哪一步搞错了,因为有时候用户自己也会记错;或者项目在运行到哪一步的时候发生了错误,方便定位到具体的代码
  2. 和其他系统的交互记录。例如要和第三方系统进行交互(比如支付宝、微信支付等),如果是对方系统的问题,我们也有相应的佐证和记录
  3. 错误信息。当程序遇到错误的时候,应该打印错误信息,不管是程序的异常,还是数据库的异常,例如执行什么方法报错了,或者执行什么SQL报错了,都有助于分析和解决问题

‍这里提一下,一个日志文件一般以 .log 结尾

‍

# 日志的级别

并不是所有事情都要打日志,确切的说,不是什么时候都应该打印全部日志。

例如,在系统刚上线的时候,尽可能的多打日志是对的,不管是错误的日志,还是正确的日志,甚至可能一些不太重要的日志;因为有一些问题可能没有暴露出来,当有问题的时候能很好的通过日志 定位和解决问题。

当系统运行稳定的时候,再打印这么多日志就没有必要了;大部分功能都已经稳定,还继续打印那些正常的日志,着实没有必要,因为此时大部分功能都不会有问题了,此时可以将系统设置为 只打印错误日志

也就是说,日志是可以分级别的。例如可以定个3级,1级表示全部打印日志,2级表示打印关键日志,3级表示只打印错误日志,不同阶段需要不同的日志级别;

日志分级别,也是很合理的,不可能所有日志都一样重要。

‍

举个生活中的例子,我们写日记的时候,可以先记录一些非常重要的事情;一些无关紧要的事情可以稍后在记录,或者不记录;当我们回顾的时候,优先看重要的日志

‍

‍

# 日志管理

由于日志是如此重要,在一些大型的企业中,会对日志有专门的管理办法。这里说下笔者接触过的企业吧:

  1. 制定专门的日志管理制度,各系统原则上均要满足该制度的内容

  2. 日志文件应该有多个。如果不切分日志,那有些系统的日志很容易就达到几十G,对于压缩、查看和移动都很占用时间

    有的系统是 1天1个日志文件 或 1小时1个, 也有的按大小切分,当超过100M就自动生成一个新的日志 或者结合起来,一小时一个,当超过100M时则生成第二个日志文件,例如以.2结尾

  3. 日志保存期限:一般在线的会保存一年,超过一年后的话可以考虑磁带等存储方式或直接清理。

  4. 日志的压缩:为了不让整体日志占用太多的空间,一般会压缩3天前的日志;

  5. 日志中通常含有敏感信息,得保护好日志不能被随意访问。例如用户的姓名,手机号,邮箱等,而且会体现代码的执行过程,如果被随意泄漏,会造成客户的损失,并且有可能被黑客抓到漏洞,进而攻击系统。

‍

对于日志保存期限和大小,可以用crontab脚本压缩和清理一年前的日志。

上述日志管理的方法仅供参考,读者应结合自己的实际情况,来选择日志管理方法。也有的项目会将一些关键的日志记录到数据库里(这样就不用打开日志文件去搜索),方便搜索数据库。

‍

# 日志的缺点

那是不是使用日志就没有缺点了呢?有的 :

  1. 需要增加打印日志的代码,在开发阶段增加了一点工作量
  2. 项目在运行的时候,会执行打印日志的代码,会占用一定的资源(CPU和内存),降低一点点项目的性能
  3. 当日志太过详细,日志文件会太大;会占用一定的存储空间;并且太多的话在排查的时候难以定位(例如一个1G的日志,打开会很慢,搜索也会很慢)

当然,大部分时候记录日志都是利大于弊的

‍

‍

# 相关阅读

‍例如B站崩溃的时候,也是要看日志:

文字版:2021.07.13 B站是这样崩的 (opens new window)

视频版:2021.07.13 B站是这样崩的_哔哩哔哩_bilibili (opens new window)

22:55远程在家的相关同学登陆VPN后,无法登陆内网鉴权系统(B站内部系统有统一鉴权,需要先获取登录态后才可登陆其他内部系统),导致无法打开内部系统,**无法及时查看监控、​日志来定位问题。**​

欢迎补充其他的相关阅读~

在GitHub上编辑此页 (opens new window)
上次更新: 2023/3/26 02:41:39
Ant系列小结
print大法

← Ant系列小结 print大法→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式