GO日志打印如何添加goroutineid

 更新时间:2024年05月07日 09:45:50   作者:流子  
今天想给日志添加一个前缀,以区分不同goroutine的日志,方便做并发问题的排查,做日志跟踪,下面给大家分享GO日志打印如何添加goroutineid,感兴趣的朋友跟随小编一起看看吧

今天想给日志添加一个前缀,以区分不同goroutine的日志,方便做并发问题的排查,做日志跟踪。
为了解决goroutineid,网上各出奇招,有的使用runtime包未公开的方法获取:

func Goid() int {
    defer func()  {
        if err := recover(); err != nil {
            fmt.Println("panic recover:panic info:%v", err)        }
    }()
    var buf [64]byte
    n := runtime.Stack(buf[:], false)
    idField := strings.Fields(strings.TrimPrefix(string(buf[:n]), "goroutine "))[0]
    id, err := strconv.Atoi(idField)
    if err != nil {
        panic(fmt.Sprintf("cannot get goroutine id: %v", err))
    }
    return id
}

如何引用呢?

func setPrefix(level Level) {
	_, file, line, ok := runtime.Caller(DefaultCallerDepth)
	if ok {
		logPrefix = fmt.Sprintf("[%s][%d][%s:%d]", levelFlags[level], Goid(), filepath.Base(file), line)
	} else {
		logPrefix = fmt.Sprintf("[%s]", levelFlags[level])
	}
	logger.SetPrefix(logPrefix)
}

这个方法我觉得靠谱,显然runtime包是肯定有获取协程id的方法的,因为处理panic时默认会输出问题协程号。但是这样做效率会不会有问题,暂时还不清楚。

到此这篇关于GO日志打印添加goroutineid的文章就介绍到这了,更多相关GO goroutineid内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go接口的用法详解

    Go接口的用法详解

    本文主要介绍了Go接口的用法详解,包括定义接口、实现接口、使用接口、空接口等,通过接口,可以实现多态性,即一个对象可以实现多个接口,从而实现不同接口的行为,感兴趣的可以了解一下
    2023-11-11
  • Golang 实现 RTP音视频传输示例详解

    Golang 实现 RTP音视频传输示例详解

    这篇文章主要为大家介绍了Golang实现RTP音视频传输的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • go-spew调试利器详解

    go-spew调试利器详解

    这篇文章主要介绍了调试利器 go-spew,go-spew 可以以一种非常友好的方式输出完整的数据结构信息,go-spew 支持一些自定义配置,可以通过 spew.Config 修改,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 初学Go必备的vscode插件及最常用快捷键和代码自动补全

    初学Go必备的vscode插件及最常用快捷键和代码自动补全

    这篇文章主要给大家介绍了关于初学vscode写Go必备的vscode插件及最常用快捷键和代码自动补全的相关资料,由于vscode是开源免费的,而且开发支持vscode的插件相对比较容易,更新速度也很快,需要的朋友可以参考下
    2023-07-07
  • golang生成指定位数的随机数的方法

    golang生成指定位数的随机数的方法

    这篇文章主要介绍了golang生成指定位数的随机数的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Go并发控制WaitGroup的使用场景分析

    Go并发控制WaitGroup的使用场景分析

    WaitGroup,可理解为Wait-Goroutine-Group,即等待一组goroutine结束,本文通过具体场景结合实际例子给大家介绍使用WaitGroup控制的实现方法,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • Go语言数据类型简单介绍

    Go语言数据类型简单介绍

    这篇文章主要介绍了Go语言数据类型简单介绍的相关资料,需要的朋友可以参考下
    2023-08-08
  • golang默认Logger日志库在项目中使用Zap日志库

    golang默认Logger日志库在项目中使用Zap日志库

    这篇文章主要为大家介绍了golang默认Logger日志库在项目中使用Zap日志库,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Golang如何用gorm实现分页的功能

    Golang如何用gorm实现分页的功能

    这篇文章主要介绍了Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • 一个Pod调度失败后重新触发调度的所有情况分析

    一个Pod调度失败后重新触发调度的所有情况分析

    这篇文章主要为大家介绍了一个Pod调度失败后重新触发调度的所有情况分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论