软件开发为什么写日志,怎样写日志,什么时候写日志?

目录

一、为什么需要写日志

二、什么时候写日志

三、日志是写给谁看的

四、日志里都要写什么

五、日志的组织形式应该怎样

六、综上所述


在软件系统中,记录日志是基本且必要的操作,这一点几乎是所有开发者的共识。各种编程语言中都有众多的日志框架供选择,能够将日志输出到文本文件、数据库、消息队列、Redis等不同的存储介质中。对于日志的不同级别,如Trace、Debug、Warning、Error、Fault,开发者们通常都很熟悉。然而,面对以下几个问题,又有多少人能给出答案呢? 换句话说,尽管表达方式可能不同,但核心意义大致相同。分别从一下5个方面讲述一下日志:

  • 为什么需要写日志?
  • 什么时候写日志?
  • 日志是写给谁看的?
  • 日志里都要写什么?
  • 日志的组织结构应该怎样?

一、为什么需要写日志

我们要认识到记录日志并非仅仅是为了存档,而是有目的地进行。我们应当能够通过详尽的日志文件,复原程序的全部执行过程,详细到每个线程和每个操作的层面。日志的作用应类似于飞机驾驶舱内的黑匣子,能够提供关于异常事件的全面和详尽信息。

对于大多数程序员来说,编写代码注释和文档的重要性经常被强调。然而,我认为日志记录的重要性在这些方面毫不逊色,甚至在某些情况下更为关键。

在讨论“软件工程”时,人们往往只注意到“软件”这一部分,却忽略了“工程”这一环节。软件存在的目的是为了解决问题,作为工程的一部分,我们不仅需要关注软件开发(包括编码注释和文档),还应该关注软件的运维,即日志记录。没有任何软件是完美无瑕的,软件部署后一旦出现问题,如果没有适当的日志记录,我们将无法了解系统运行状态,从而难以解决问题。尽管有时简单的重启看似解决了问题,但这只是临时的解决办法,问题终将再次出现。

因此,良好的日志记录实践变得极其重要。通过详细记录程序执行过程中的细节和发生异常时的具体情况,我们可以像专家一样精确地解析和理解应用的运行机理。 换句话说,这种表述虽与之前的不同,但其根本意义是一致的。

  • 监控和诊断:日志是系统监控和诊断问题的重要工具。当系统出现故障或异常时,通过查看日志可以快速定位问题,减少故障排查时间。
  • 审计和安全:日志记录了系统操作和用户行为,对于安全审计和追踪恶意行为至关重要。
  • 性能分析:通过分析日志数据,可以了解系统的性能瓶颈,优化资源配置。
  • 业务跟踪:在复杂的业务系统中,日志可以帮助跟踪业务流程,确保业务逻辑的正确性。

二、什么时候写日志

在构建软件系统时,我们通常会直接搭建基础模块,包括日志模块,而不考虑太多。随后,开发者往往只专注于实现业务逻辑,利用强大的IDE调试功能,对日志的依赖感降低。结果往往是业务功能完成后,日志模块被忽略,系统中只留下基本的启动和停止日志。这种情况在生产环境出现问题时变得棘手,由于缺少足够的日志,诊断问题变得困难。事后再补充日志通常只能停留在表面,难以深入问题本质。因此,最佳写日志的时机是在开发功能代码时,这样能够确保日志覆盖关键的业务流转和异常处理,提高系统运维的效率和准确性。

  • 系统启动和关闭:记录系统启动和关闭时的状态信息。
  • 关键业务操作:记录与用户交互的关键业务操作,如用户登录、支付、下单等。
  • 异常和错误:当系统出现异常或错误时,应记录详细的异常信息和堆栈跟踪。
  • 定时任务:对于定时执行的任务,应记录任务的执行结果和耗时。
  • 关键决策点:在算法或业务逻辑中的关键决策点,记录决策的依据和结果。

三、日志是写给谁看的

在我看来,日志对于运维人员、开发人员以及白盒测试工程师都至关重要,具有不同的应用价值。运维团队可以通过日志获取程序的安装细节、环境配置、启动状态和运行信息等;开发人员通过日志可以深入了解程序如何处理业务逻辑,包括业务流程、各个环节和现场状态等;白盒测试工程师也可以通过日志来验证程序的非功能性需求等。

  • 开发人员:用于调试和修复代码中的错误。
  • 运维人员:用于监控系统的运行状态和性能,以及进行故障排查。
  • 审计人员:用于安全审计和合规性检查。
  • 管理人员:了解系统的整体运行情况和业务状况。

四、日志里都要写什么

考虑使用者:

这里只考虑程序员部分:

  • 时间戳:记录日志产生的时间。
  • 日志级别:如Trace、Debug、Info、Warning、Error等,表示日志的重要性。
  • 日志内容:具体的日志信息,如操作描述、数据内容、异常堆栈等。
  • 来源信息:如模块名、类名、方法名、用户ID等,用于定位问题。
  • 其他上下文信息:如请求ID、会话ID、IP地址等,用于关联和分析日志

五、日志的组织形式应该怎样

  • 按时间顺序存储:便于按时间范围查询和分析日志。
  • 分类存储:按模块、业务或功能将日志分类存储,便于快速定位问题。
  • 结构化存储:使用JSON、XML等结构化格式存储日志,便于解析和处理。
  • 日志滚动:当日志文件达到一定大小或时间跨度时,进行滚动存储,避免单个文件过大。
  • 日志压缩和归档:对于历史日志,可以进行压缩和归档存储,以节省存储空间。

六、综上所述

  1. 日志的重要性:日志是系统运行的“黑匣子”,记录了系统的各种行为和状态,对于监控、诊断、审计和性能分析等方面都具有重要意义。
  2. 日志的生成时机:在系统运行的关键节点和异常情况下生成日志,以便及时记录和追踪问题。
  3. 日志的受众:日志是为不同角色的人员设计的,包括开发人员、运维人员、审计人员和管理人员等,以满足他们的不同需求。
  4. 日志的内容:日志应包含足够的信息以描述事件的全貌,包括时间戳、日志级别、内容、来源和其他上下文信息等。
  5. 日志的组织结构:合理的日志组织结构有助于高效地存储、查询和分析日志数据,包括按时间顺序存储、分类存储、结构化存储以及日志滚动和归档等策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于MATLAB的误码率与信噪比(附完整代码与分析)

目录 一. 写在前面 二. 如何计算误码率 三. 带噪声的误码率分析 3.1 代码思路 3.2 MATLAB源代码及分析 四. 总结 4.1 输入参数 4.2 规定比特长度 4.3 特殊形式比较 一. 写在前面 (1)本文章主要讨论如何仿真误码率随着信噪比变化的图像 &#…

112、路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没有子节点…

Java基础16(集合框架 List ArrayList容器类 ArrayList底层源码解析及扩容机制)

目录 一、什么是集合? 二、集合接口 三、List集合 四、ArrayList容器类 1. 常用方法 1.1 增加 1.2 查找 int size() E get(int index) int indexOf(Object c) boolean contains(Object c) boolean isEmpty() List SubList(int fromindex,int …

QT-QPainter实现一个可切换的开关控件

1、效果 2、核心代码 #ifndef SWITCH_H #define SWITCH_H #include <QWidget> #include <QTimer>

Freemaker 模板

背景 发送邮件&#xff0c;正文利用freemaker完成 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>Autowired private Configuration configurer;GetMap…

如何调用讯飞星火认知大模型的API以利用其卓越功能

摘要 讯飞星火认知大模型&#xff0c;作为科大讯飞精心打造的一款人工智能模型&#xff0c;在自然语言理解和生成方面展现出了卓越的能力。这款模型通过深度学习技术和大量数据的训练&#xff0c;具备了强大的语言理解、文本生成和对话交互等功能。 一、模型功能概述 讯飞星…

我的创作纪念日--码农阿豪

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

前缀和+双指针,CF 131F - Present to Mom

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 131F - Present to Mom 二、解题报告 1、思路分析 很经典的一种把列看作cell 来进行双指针/递推的题型 我们考虑&#xff0c;可以预处理出原矩阵中的所有star 然后我们去枚举矩形的上下边界&#xff0c;把…

Flow Matching For Generative Modeling

Flow Matching For Generative Modeling 一、基于流的&#xff08;Flow based&#xff09;生成模型 生成模型 我们先回顾一下所谓的生成任务&#xff0c;究竟是想要做什么事情。我们认为&#xff0c;世界上所有的图片&#xff0c;是符合某种分布 p d a t a ( x ) p_{data}(…

【因果推断python】45_估计量1

目录 问题设置 目标转换 到目前为止&#xff0c;我们已经了解了如何在干预不是随机分配的情况下对我们的数据进行纠偏&#xff0c;这会导致混淆偏差。这有助于我们解决因果推理中的识别问题。换句话说&#xff0c;一旦单位是可交换的&#xff0c;或者 &#xff0c;就可以学习…

增加了redis分布式锁,但是还是生成了重复数据

增加了redis分布式锁&#xff0c;但是还是生成了重复数据 原因 两个线程 第一个线程先获取锁&#xff0c;然后进行新增&#xff0c;此时第二个线程也进入方法体&#xff0c;尝试获取锁&#xff0c;结果没获取到&#xff0c;继续在5s内尝试&#xff0c;在redis获取锁等待5s的过…

Linux环境如何彻底卸载感干净RabbitMQ并重新安装

Linux&#xff08;Centos7&#xff09;环境如何彻底卸载感干净RabbitMQ并重新安装 我这个是超级简单的&#xff0c;如果安装不好&#xff0c;顺着网线来找我 一、卸载RabbitMq相关的软件包 1. 先停止RabbitMq服务 systemctl stop rabbitmq-server2. 查看rabbitmq安装的相关…

房地产市场的三个背离 欧美市场混动占优,丰田押注小发动机

当前我国房地产市场二手房表现与新房表现明显背离&#xff0c;核心城市表现与低线城市开始背离&#xff0c;未来可能出现房价表现与开发投资景气表现背离。看好核心城市在政策推动下进一步释放需求推动市场结构性复苏的前景。 房地产开发景气度继续下行 2024年5月&#xff0c;…

QT利用QGraphicsDropShadowEffect效果及自定义按钮来实现一个炫酷键盘

1、效果 2、核心代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent<

开源!在goview中实现cesium的低代码可视化编辑

大家好&#xff0c;我是日拱一卒的攻城师不浪&#xff0c;专注可视化、数字孪生、前端、nodejs、AI学习、GIS等学习沉淀&#xff0c;这是2024年输出的第19/100篇文章&#xff1b; 前言 前阵子写了一篇goview二开的文章教程&#xff0c;很多小伙伴留言对goview嵌套cesium并实现…

TCP编程

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 由于TCP连接具有安全可靠的特性&#xff0c;所以TCP应用更为广泛。创建TCP连接时&#xff0c;主动发起连接的叫客户端&#xff0c;被动响应连接的叫服…

【TIM输出比较】

TIM输出比较 1.简介1.1.输出比较功能1.2.PWM 2.输出比较通道2.1.结构原理图2.2.模式分类 3.输出PWM波形及参数计算4.案例所需外设4.1.案例4.2.舵机4.3.直流单机 链接: 15-TIM输出比较 1.简介 1.1.输出比较功能 输出比较&#xff0c;英文全称Output Compare&#xff0c;简称O…

AI 情感聊天机器人之旅 —— 相关论文调研

开放域闲聊场景 Prompted LLMs as Chatbot Modules for Long Open-domain Conversation 发布日期&#xff1a;2023-05-01 简要介绍&#xff1a;作者提出了 MPC&#xff08;模块化提示聊天机器人&#xff09;&#xff0c;这是一种无需微调即可创建高质量对话代理的新方法&…

【网络安全产品】---网闸

了解了不少安全产品&#xff0c;但是对网闸的理解一直比较模糊&#xff0c;今天 what 网闸是安全隔离与信息交换系统的简称&#xff0c;使得在不影响数据正常通信的前提下&#xff0c;让络在不连通的情况下数据的安全交换和资源共享&#xff0c;对不同安全域/网络之间实现真正…

【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f4d5;引言 ⛓决策树的基本原理 1. 决策树的结构 2. 信息增益 熵的计算公式 信息增益的计算公式 3. 基尼指数 4. 决策树的构建 &#x1f916;决策树的代码实现 1. 数据准备 2. 决策树模型训练 3.…