GO日志打印如何添加goroutineid
更新時間:2024年05月07日 09:45:50 作者:流子
今天想給日志添加一個前綴,以區(qū)分不同goroutine的日志,方便做并發(fā)問題的排查,做日志跟蹤,下面給大家分享GO日志打印如何添加goroutineid,感興趣的朋友跟隨小編一起看看吧
今天想給日志添加一個前綴,以區(qū)分不同goroutine的日志,方便做并發(fā)問題的排查,做日志跟蹤。
為了解決goroutineid,網上各出奇招,有的使用runtime包未公開的方法獲?。?/p>
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包是肯定有獲取協(xié)程id的方法的,因為處理panic時默認會輸出問題協(xié)程號。但是這樣做效率會不會有問題,暫時還不清楚。
到此這篇關于GO日志打印添加goroutineid的文章就介紹到這了,更多相關GO goroutineid內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
golang基于errgroup實現(xiàn)并發(fā)調用的方法
這篇文章主要介紹了golang基于errgroup實現(xiàn)并發(fā)調用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09

