GO日志打印如何添加goroutineid
今天想給日志添加一個前綴,以區(qū)分不同goroutine的日志,方便做并發(fā)問題的排查,做日志跟蹤。
為了解決goroutineid,網(wǎng)上各出奇招,有的使用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é)程號。但是這樣做效率會不會有問題,暫時還不清楚。
到此這篇關(guān)于GO日志打印添加goroutineid的文章就介紹到這了,更多相關(guān)GO goroutineid內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang字符串轉(zhuǎn)64位整數(shù)的示例代碼
這篇文章主要介紹了golang字符串轉(zhuǎn)64位整數(shù),在Go語言中,可以使用strconv包中的ParseInt函數(shù)將字符串轉(zhuǎn)換為64位整數(shù),本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-09-09
使用golang如何優(yōu)雅的關(guān)機或重啟操作示例
這篇文章主要為大家介紹了使用golang如何優(yōu)雅的關(guān)機或重啟操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04
golang基于errgroup實現(xiàn)并發(fā)調(diào)用的方法
這篇文章主要介紹了golang基于errgroup實現(xiàn)并發(fā)調(diào)用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09

