讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

异常日志应记录哪些关键字段?结构化日志的ERROR级别规范设计

冬磊小哥_4287

冬磊小哥_4287

发布时间:2025-07-01 18:15:02

|

1035人浏览过

|

来源于php中文网

原创

记录异常日志的关键在于定位问题、还原现场,需包含时间戳、线程id、类名方法名、异常类型消息堆栈、用户请求id、输入参数、服务器ip、环境信息及自定义上下文;结构化日志error级别设计应实现统一错误码、结构化消息体、可配置上下文、日志级别控制、监控集成、保留策略、敏感脱敏与链路追踪。

异常日志应记录哪些关键字段?结构化日志的ERROR级别规范设计

异常日志记录的关键在于能够快速定位问题、还原现场。除了时间、线程、类名方法名这些基本信息,更重要的是要记录导致异常的关键数据,以及异常发生时的上下文环境。结构化日志的ERROR级别规范设计,则要围绕着“可报警、可分析、可追溯”这三个核心目标展开。

异常日志应记录哪些关键字段?结构化日志的ERROR级别规范设计

记录异常日志的关键字段包括:

异常日志应记录哪些关键字段?结构化日志的ERROR级别规范设计
  • 时间戳 (Timestamp):精确到毫秒甚至微秒,方便排序和定位。
  • 日志级别 (Level):ERROR级别,明确标识为错误。
  • 线程 ID (Thread ID):方便追踪多线程问题。
  • 类名和方法名 (Class Name & Method Name):定位异常发生的具体位置。
  • 异常类型 (Exception Type):例如 NullPointerException, IOException 等。
  • 异常消息 (Exception Message):异常的简要描述。
  • 堆栈轨迹 (Stack Trace):完整的调用链,帮助定位问题根源。
  • 用户 ID (User ID):如果异常与特定用户相关,记录用户 ID 便于追踪。
  • 请求 ID (Request ID):在分布式系统中,请求 ID 用于串联多个服务之间的调用链。
  • 输入参数 (Input Parameters):导致异常的输入参数,对于调试至关重要。
  • 服务器 IP 地址 (Server IP Address):方便定位发生异常的服务器。
  • 环境信息 (Environment Information):例如操作系统、JVM 版本等。
  • 自定义上下文数据 (Custom Context Data):根据业务需要记录的额外信息,例如订单 ID、商品 ID 等。

结构化日志ERROR级别规范设计:

  • 统一的错误码 (Error Code): 为每种类型的错误分配一个唯一的错误码,方便程序识别和处理,也方便日志分析工具进行统计和分类。例如,数据库连接失败可以使用 DB_CONNECTION_ERROR。
  • 结构化的消息体 (Structured Message Body): 使用 JSON 或其他结构化格式存储日志信息,方便机器解析和分析。例如:
{
  "timestamp": "2024-10-27T10:00:00.000Z",
  "level": "ERROR",
  "errorCode": "DB_CONNECTION_ERROR",
  "message": "Failed to connect to database",
  "details": {
    "host": "192.168.1.100",
    "port": 3306,
    "user": "readonly"
  },
  "requestId": "abc-123-xyz"
}
  • 可配置的上下文信息 (Configurable Context Information): 允许开发人员根据需要添加自定义的上下文信息,例如当前请求的 URL、用户代理等。
  • 日志级别控制 (Log Level Control): 允许通过配置文件或命令行参数控制日志级别,方便在不同环境下调整日志输出的详细程度。
  • 与监控系统集成 (Integration with Monitoring Systems): 将 ERROR 级别的日志与监控系统集成,当出现错误时可以及时发出警报。例如,可以使用 Prometheus + Alertmanager 进行监控和告警。
  • 日志保留策略 (Log Retention Policy): 制定合理的日志保留策略,避免日志占用过多存储空间。
  • 敏感信息脱敏 (Sensitive Information Masking): 对日志中的敏感信息进行脱敏处理,例如密码、信用卡号等。
  • 链路追踪 (Trace ID): 在分布式系统中,使用 Trace ID 将一次请求的日志串联起来,方便追踪问题。

如何选择合适的日志框架?

异常日志应记录哪些关键字段?结构化日志的ERROR级别规范设计

选择日志框架时,需要考虑以下因素:

  • 性能: 日志框架的性能直接影响应用程序的性能,特别是对于高并发的系统。应该选择性能良好的日志框架,例如 Logback、Log4j2 等。
  • 功能: 日志框架应该提供丰富的功能,例如支持多种日志级别、多种输出目标、多种日志格式等。
  • 可扩展性: 日志框架应该具有良好的可扩展性,方便添加自定义的日志 appender 和 layout。
  • 易用性: 日志框架应该易于配置和使用,方便开发人员快速上手。
  • 社区支持: 日志框架应该拥有活跃的社区,方便获取帮助和解决问题。

如何使用 MDC (Mapped Diagnostic Context) 记录上下文信息?

协同养育操作系统
协同养育操作系统

协同养育操作系统(Co-Parenting OS)— 离异家庭专业协同养育支持系统。12模块覆盖接送管理、成长记忆库、孩子观察站、亲子关系粘合剂、共同挑战中心、情绪冲突观察、父母成长、成长档案馆、成长阶段引擎、风险预警、驾驶舱、被恶意攻击急救包。当用户涉及离异家庭育儿、协同养育、抚养探视、接送安排、孩子成长记录、亲子关系、离异冲突、被恶意攻击、前任矛盾等话题时触发。

下载

MDC 是一种在多线程环境下记录上下文信息的机制。它允许将一些键值对存储在线程上下文中,并在日志输出时自动包含这些信息。例如,可以使用 MDC 记录用户 ID、请求 ID 等信息。

import org.slf4j.MDC;

public class MyService {

  public void processRequest(String userId, String requestId) {
    MDC.put("userId", userId);
    MDC.put("requestId", requestId);

    try {
      // ... 业务逻辑 ...
    } catch (Exception e) {
      // 记录异常日志,会自动包含 userId 和 requestId
      logger.error("Failed to process request", e);
    } finally {
      MDC.remove("userId");
      MDC.remove("requestId");
    }
  }
}

如何避免日志 flood (日志泛滥)?

日志 flood 是指日志量过大,导致存储空间不足、分析困难等问题。为了避免日志 flood,可以采取以下措施:

  • 调整日志级别: 将日志级别设置为合适的级别,例如在生产环境中可以将日志级别设置为 INFO 或 WARN。
  • 限制日志输出频率: 对于某些频繁发生的事件,可以限制日志输出的频率,例如每分钟只输出一次。
  • 使用采样: 对于某些不重要的日志,可以使用采样的方式进行记录,例如只记录 1% 的日志。
  • 日志聚合: 将多个日志合并成一条日志,减少日志量。
  • 定期清理日志: 定期清理过期的日志,释放存储空间。
  • 优化代码: 检查代码中是否存在不必要的日志输出,并进行优化。

如何处理分布式系统中的日志?

在分布式系统中,日志分散在多个服务器上,难以集中管理和分析。为了解决这个问题,可以使用以下方案:

  • 集中式日志收集: 使用工具例如 Filebeat、Logstash 将各个服务器上的日志收集到中央服务器上。
  • 日志存储: 使用 Elasticsearch 等存储引擎存储日志。
  • 日志分析: 使用 Kibana 等工具对日志进行分析和可视化。
  • 链路追踪: 使用 Jaeger、Zipkin 等工具进行链路追踪,方便定位分布式系统中的问题。

使用ERROR级别日志时,应该避免什么?

  • 避免记录不重要的错误: 只有真正需要关注的错误才应该记录为 ERROR 级别,避免记录一些可以忽略的错误。
  • 避免记录重复的错误: 如果同一个错误重复发生,只需要记录一次即可,避免重复记录。
  • 避免记录敏感信息: 不要将敏感信息例如密码、信用卡号等记录到日志中。
  • 避免使用过于笼统的错误消息: 错误消息应该尽可能详细,方便定位问题。
  • 避免过度依赖日志: 日志只是辅助工具,不能完全依赖日志来解决问题。应该结合其他工具例如调试器、性能分析器等进行分析。

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2193

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3694

2023.10.07

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2335

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3842

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1276

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4459

2025.09.10

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1069

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3500

2023.10.25

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn