Golang HTTP接口日志记录与分析示例

答案:通过中间件记录HTTP请求日志并使用结构化日志库如zap输出JSON格式日志,便于后续分析。1. 使用自定义responseWriter捕获状态码;2. 在中间件中记录IP、方法、URI、状态码、耗时和User-Agent;3. 接入zap等库实现结构化日志;4. 利用grep、awk、jq等工具进行高频接口、错误请求、慢响应和IP访问量分析。

golang http接口日志记录与分析示例

在 Golang 中开发 HTTP 接口时,记录和分析请求日志是调试、监控和安全审计的重要手段。一个良好的日志系统能帮助你快速定位问题、了解用户行为,并为性能优化提供数据支持。下面通过一个简单但实用的示例,展示如何实现 HTTP 接口的日志记录与基本分析。

使用中间件记录 HTTP 请求日志

Go 的 http.Handler 支持中间件模式,我们可以通过封装 handler 来实现统一的日志记录。

以下是一个基础的日志中间件:

func loggingMiddleware(next http.Handler) http.Handler {    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        start := time.Now()        // 记录原始信息        ip := r.RemoteAddr        method := r.Method        uri := r.URL.RequestURI()        userAgent := r.Header.Get("User-Agent")        // 包装 ResponseWriter 以获取状态码        rw := &responseWriter{ResponseWriter: w, statusCode: http.StatusOK}        // 调用实际处理函数        next.ServeHTTP(rw, r)        // 日志输出        log.Printf(            "ip=%s method=%s uri=%s status=%d duration=%v user_agent=%q",            ip, method, uri, rw.statusCode, time.Since(start), userAgent,        )    })}// 自定义 ResponseWriter 获取状态码type responseWriter struct {    http.ResponseWriter    statusCode int}func (rw *responseWriter) WriteHeader(code int) {    rw.statusCode = code    rw.ResponseWriter.WriteHeader(code)}

接入日志中间件到 HTTP 服务

将上述中间件应用到你的路由中,可以对所有请求进行统一记录。

立即学习“go语言免费学习笔记(深入)”;

func main() {    mux := http.NewServeMux()    mux.HandleFunc("/api/hello", func(w http.ResponseWriter, r *http.Request) {        w.Header().Set("Content-Type", "application/json")        w.WriteHeader(http.StatusOK)        json.NewEncoder(w).Encode(map[string]string{            "message": "Hello, World!",        })    })    // 使用中间件包装 mux    loggedMux := loggingMiddleware(mux)    log.Println("Server starting on :8080...")    http.ListenAndServe(":8080", loggedMux)}

访问 /api/hello 后,控制台会输出类似:

Shakker Shakker

多功能AI图像生成和编辑平台

Shakker 103 查看详情 Shakker

2025/04/05 10:00:00 ip=127.0.0.1:56789 method=GET uri=/api/hello status=200 duration=123.45µs user_agent="curl/7.68.0"

结构化日志与分析建议

默认的 log 包输出的是文本日志,不利于后续分析。推荐使用 zap 或 logrus 等支持结构化日志的库。

例如使用 zap:

import "go.uber.org/zap"var logger *zap.Loggerfunc init() {    var err error    logger, err = zap.NewProduction()    if err != nil {        panic(err)    }}// 在中间件中替换 log.Printf 为:logger.Info("http_request",    zap.String("ip", ip),    zap.String("method", method),    zap.String("uri", uri),    zap.Int("status", rw.statusCode),    zap.Duration("duration", time.Since(start)),    zap.String("user_agent", userAgent),)

输出将是 JSON 格式,便于被 ELK、Loki 等系统采集和查询。

简单日志分析技巧

有了结构化日志后,你可以进行一些基础分析:

统计高频接口:grep ‘”uri”:”/api/’ logs.json | awk ‘{print $8}’ | sort | uniq -c | sort -nr 查看错误请求:grep ‘”status”:5’ logs.json 分析响应慢的请求:jq ‘select(.duration > 1)’ logs.json 按 IP 统计访问量:grep ‘”ip”‘ logs.json | awk ‘{print $6}’ | sort | uniq -c

基本上就这些。通过中间件记录日志,再配合结构化输出,就能为 Go 服务构建一个轻量但有效的日志体系。不复杂但容易忽略。

以上就是Golang HTTP接口日志记录与分析示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1132807.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
phpmyadmin导入失败
上一篇 2025年12月2日 17:20:23
移动端开发中,如何使用vs-tree组件实现点击节点直接展开子节点?
下一篇 2025年12月2日 17:20:32

相关推荐

  • Java自定义类方法链式调用与对象状态修改实践

    在Java中,实现自定义类方法链式调用以修改对象属性的关键在于让修改方法返回当前类的实例(this)。通过返回this,不仅可以连续调用同一对象的其他方法,还能将操作后的对象赋值给同类型变量,从而构建出更简洁、流畅的代码风格。 引言:理解Java方法链式调用的需求 在java编程中,我们经常会遇到需…

    2026年10月2日
    200
  • PHP操作MySQL数据库时与Elasticsearch集成的应用

    在php中操作mysql数据库并与elasticsearch集成可以通过以下步骤实现:1. 使用mysqli或pdo扩展连接mysql数据库进行数据操作。2. 利用elasticsearch的php客户端库进行数据索引和搜索。3. 通过定时任务或触发器实现mysql数据的实时同步到elasticse…

    2026年10月2日
    000
  • 多模态AI能识别哪些内容 多模态AI支持的输入类型大全

    多模态AI能识别哪些内容 多模态AI支持的输入类型大全多模态AI能识别哪些内容 多模态AI支持的输入类型大全多模态AI能识别哪些内容 多模态AI支持的输入类型大全多模态AI能识别哪些内容 多模态AI支持的输入类型大全

    多模态人工智能集成了处理和理解来自不同模态信息的能力,这些模态包括但不限于文本、图像、音频、视频等。本文旨在详细阐述多模态AI能够识别和处理的内容类型,并列举其支持的主要输入形式,帮助您了解其工作原理和应用范围。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek…

    2026年10月2日 • 用户投稿
    000
  • 三星正式向更多Galaxy设备推送SamsungOne UI 8更新

    三星正式向更多Galaxy设备推送SamsungOne UI 8更新三星正式向更多Galaxy设备推送SamsungOne UI 8更新三星正式向更多Galaxy设备推送SamsungOne UI 8更新三星正式向更多Galaxy设备推送SamsungOne UI 8更新

    增强的个性化ai功能将赋能更多用户的日常生活,进一步推动ai技术的普及 2025年9月15日,三星电子正式宣布启动Samsung One UI 8系统更新推送,为更广泛的Galaxy用户群体带来升级版的多模态AI能力,以及针对不同设备形态优化的操作体验和智能个性化建议,助力打造更加智慧、高效的日常使…

    2026年10月2日 • 用户投稿
    000
  • Yii框架中的模型关系:实现数据关联

    在%ignore_a_1%框架中,模型关系是一个非常重要的概念,用于实现多个数据表之间的数据关联。通过定义关联关系,可以使得在查询数据时,可以直接获取到相关联的数据,从而大大降低查询复杂度,提高数据查询效率。本文将详细介绍yii框架中的模型关系,包括如何定义关联关系、不同类型的关联关系以及如何使用关…

    用户投稿 2026年10月2日
    000
  • 硬盘数据恢复贵吗?如何用低成本恢复丢失的数据?

    硬盘数据恢复贵吗?如何用低成本恢复丢失的数据?硬盘数据恢复贵吗?如何用低成本恢复丢失的数据?硬盘数据恢复贵吗?如何用低成本恢复丢失的数据?硬盘数据恢复贵吗?如何用低成本恢复丢失的数据?

    数据恢复价格因难度而异,首先应停止使用硬盘以防覆盖数据,检查连接后尝试用Recuva、EaseUS等软件恢复;若硬盘有物理损坏需创建镜像或送专业实验室;预防则靠定期备份、RAID、监控SMART状态及安全操作。 硬盘数据恢复的价格差异很大,主要取决于数据丢失的严重程度和恢复的复杂性。自己动手尝试恢复…

    2026年10月2日 • 用户投稿
    000
  • Spring Boot多数据源JPA配置与原生查询实践

    Spring Boot多数据源JPA配置与原生查询实践Spring Boot多数据源JPA配置与原生查询实践Spring Boot多数据源JPA配置与原生查询实践Spring Boot多数据源JPA配置与原生查询实践

    本文详细介绍了在Spring Boot应用中配置和管理多个JPA数据源的方法,特别聚焦于如何解决在使用原生SQL查询时可能遇到的“表不存在”问题。通过引入PersistenceUnitName明确绑定EntityManager到特定数据源,并结合@EnableJpaRepositories和@Tra…

    2026年10月2日 • 用户投稿
    000
  • 电脑怎么取消开机密码?

    电脑怎么取消开机密码?电脑怎么取消开机密码?电脑怎么取消开机密码?电脑怎么取消开机密码?

    开机密码相信大家都不会感到陌生,当我们启动电脑时,只有输入正确的密码才能正常使用,这能够有效地保障系统中的数据安全。然而,当我们想要取消已经设置的开机密码时,应该怎么做呢?接下来,我会为大家详细讲解如何取消电脑的开机密码。 如何取消电脑的开机密码呢?随着社会的进步,电脑已经成为我们工作和学习中不可或…

    2026年10月2日 • 用户投稿
    100
  • 如何开发多模态AI应用 多模态AI开发入门指南与工具推荐

    如何开发多模态AI应用 多模态AI开发入门指南与工具推荐如何开发多模态AI应用 多模态AI开发入门指南与工具推荐如何开发多模态AI应用 多模态AI开发入门指南与工具推荐如何开发多模态AI应用 多模态AI开发入门指南与工具推荐

    多模态人工智能旨在融合并理解来自不同源的数据,如文本、图像、音频和视频,从而构建更具洞察力和交互性的智能系统。本文将为您提供一个多模态AI开发的入门指南,从基本概念、核心开发步骤到实用的工具和框架推荐,旨在帮助您快速了解并启动您的多模态AI项目,理解如何将不同类型的数据协同用于解决复杂问题。 ☞☞☞…

    2026年10月2日 • 用户投稿
    200
  • TikTok视频上传卡顿怎么办 网络优化与上传方法

    TikTok视频上传卡顿怎么办 网络优化与上传方法TikTok视频上传卡顿怎么办 网络优化与上传方法TikTok视频上传卡顿怎么办 网络优化与上传方法TikTok视频上传卡顿怎么办 网络优化与上传方法

    网络问题和文件设置不当是TikTok上传卡顿主因。使用纯净静态住宅IP、有线网络连接,确保上传带宽超10Mbps;导出60秒内1080p MP4视频,编码H.264,音频AAC;避开晚8-10点高峰;清理缓存、更新App并重启设备可有效解决。 遇到TikTok视频上传卡顿,核心问题通常出在网络和文件…

    2026年10月2日 • 用户投稿
    200
  • Win10即将放弃支持WiFi WEP加密协议

    Win10即将放弃支持WiFi WEP加密协议Win10即将放弃支持WiFi WEP加密协议Win10即将放弃支持WiFi WEP加密协议Win10即将放弃支持WiFi WEP加密协议

    自windows 10版本1903起,当用户试图连接采用wep加密方式的无线网络时,系统会反复弹出提示警告。这一行为源于微软计划停止对该安全协议的支持,而停止支持的主要原因在于该协议已失去安全性保障。wep加密标准最早可追溯至1997年,然而早在2001年便被发现存在严重漏洞,只需一分钟收集数据包就…

    2026年10月2日 • 用户投稿
    100
  • 多模态AI如何处理视频 视频内容分析与理解技术详解

    多模态AI如何处理视频 视频内容分析与理解技术详解多模态AI如何处理视频 视频内容分析与理解技术详解多模态AI如何处理视频 视频内容分析与理解技术详解多模态AI如何处理视频 视频内容分析与理解技术详解

    多模态AI处理视频是一个复杂而精妙的过程,旨在深入理解视频内容。这不仅仅是观看图像序列,更结合了视觉、听觉甚至文本等多种信息来源进行综合分析。本文将详细阐述多模态AI如何分步骤地实现视频内容的分析与理解,帮助您了解其核心技术和操作流程。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限…

    2026年10月2日 • 用户投稿
    000
  • 检测 Java 中对象是否为 Kotlin 数组

    检测 Java 中对象是否为 Kotlin 数组检测 Java 中对象是否为 Kotlin 数组检测 Java 中对象是否为 Kotlin 数组检测 Java 中对象是否为 Kotlin 数组

    本文旨在解决在 Java 代码中检测 Kotlin 数组的问题,尤其是在处理 Kotlin 注解时遇到的类型差异。通过分析 Kotlin 数组在 JVM 层的表示,以及注解代理对象的特性,提供一种可靠的检测方法,并避免常见的误判。 在 Java 和 Kotlin 混合编程环境中,处理注解时可能会遇到…

    2026年10月2日 • 用户投稿
    100
  • 百度搜索app夜间模式如何开启_百度搜索app夜间模式的设置与使用方法

    百度搜索app夜间模式如何开启_百度搜索app夜间模式的设置与使用方法百度搜索app夜间模式如何开启_百度搜索app夜间模式的设置与使用方法百度搜索app夜间模式如何开启_百度搜索app夜间模式的设置与使用方法百度搜索app夜间模式如何开启_百度搜索app夜间模式的设置与使用方法

    开启百度App夜间模式可降低屏幕亮度,减少用眼疲劳。一、通过“我的”—“设置”—“夜间模式”开启;二、从首页“更多”入口进入“设置”开启;三、检查手机系统深色模式是否联动,若未自动切换需手动开启。 如果您在使用百度搜索App时希望降低屏幕亮度以减少夜间用眼疲劳,可以通过设置开启夜间模式。以下是具体的…

    2026年10月2日 • 用户投稿
    200
  • 掌握SQL中JOIN、WHERE和ORDER BY的组合使用技巧

    本文详细阐述了在SQL查询中同时使用JOIN、WHERE和ORDER BY子句的正确语法和逻辑顺序。重点强调了ON子句应紧随其关联的JOIN操作之后,以及WHERE子句必须位于ORDER BY子句之前,以确保查询的准确性和效率。通过具体示例,帮助读者构建结构清晰、功能完善的SQL查询语句。 SQL查…

    2026年10月2日
    100
  • 我的eMachines笔记本电脑为什么老是死机?内存升级教程

    我的eMachines笔记本电脑为什么老是死机?内存升级教程我的eMachines笔记本电脑为什么老是死机?内存升级教程我的eMachines笔记本电脑为什么老是死机?内存升级教程我的eMachines笔记本电脑为什么老是死机?内存升级教程

    首先清理散热系统并检查硅脂,其次升级内存以增强性能,接着扫描病毒并清除恶意软件,最后更新驱动与系统补丁以确保稳定性。 如果您的eMachines笔记本电脑频繁出现画面定格、无响应或自动重启等现象,这通常意味着系统在运行过程中遇到了无法及时处理的严重问题。以下是排查和解决此类问题的多种方法。 一、检查…

    2026年10月2日 • 用户投稿
    100
  • Spring Boot多数据库JPA原生查询配置指南

    Spring Boot多数据库JPA原生查询配置指南Spring Boot多数据库JPA原生查询配置指南Spring Boot多数据库JPA原生查询配置指南Spring Boot多数据库JPA原生查询配置指南

    本教程详细探讨了在Spring Boot应用中配置多个JPA数据源时,原生查询可能遇到的指向错误问题。当配置了主次两个PostgreSQL数据库,且在次要数据库上执行JPA原生SQL查询时,系统可能错误地将查询路由到主数据库。核心解决方案在于利用@PersistenceContext注解的unitN…

    2026年10月2日 • 用户投稿
    200
  • 2025腾讯全球数字生态大会:“AI百校行”正式启动,助力高校学子铸造未来竞争力

    2025腾讯全球数字生态大会:“AI百校行”正式启动,助力高校学子铸造未来竞争力2025腾讯全球数字生态大会:“AI百校行”正式启动,助力高校学子铸造未来竞争力2025腾讯全球数字生态大会:“AI百校行”正式启动,助力高校学子铸造未来竞争力2025腾讯全球数字生态大会:“AI百校行”正式启动,助力高校学子铸造未来竞争力

    ai时代的应用落地和价值深耕,既依赖于技术的飞速进步,更离不开生态伙伴开放共建。 9月16日,在2025腾讯全球数字生态大会上,为加速AI在千行百业落地进程及创新人才培养,腾讯正式发起“AI应用繁荣计划”,其中面向全国高校人才培养与素养提升的“AI百校行”同步启动;结合腾讯领先的AI技术和离产业最近…

    2026年10月2日 • 用户投稿
    100
  • Java/Spring中重复异常处理逻辑的重构与简化

    Java/Spring中重复异常处理逻辑的重构与简化Java/Spring中重复异常处理逻辑的重构与简化Java/Spring中重复异常处理逻辑的重构与简化Java/Spring中重复异常处理逻辑的重构与简化

    本教程旨在解决Spring应用中@ExceptionHandler方法体重复的问题。通过将多个相似的异常处理逻辑抽象为一个通用的私有辅助方法,实现代码的有效重构,从而提高代码的可读性、可维护性,并遵循DRY(Don’t Repeat Yourself)原则,减少冗余代码。 在复杂的企业级…

    2026年10月2日 • 用户投稿
    100
  • Microsoft Works什么?如何在Win10系统上运行?

    Microsoft Works什么?如何在Win10系统上运行?Microsoft Works什么?如何在Win10系统上运行?Microsoft Works什么?如何在Win10系统上运行?Microsoft Works什么?如何在Win10系统上运行?

    win10系统如何启用microsoft works?许多人使用win10系统时会选择安装microsoft office,但也有部分用户选择安装microsoft works。尽管microsoft works已经停止更新,但我们依然可以通过一些配置来让它在win10系统中正常工作。接下来就让我们…

    2026年10月2日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信