亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

尋找用于記錄的調用或線程 ID

尋找用于記錄的調用或線程 ID

Go
catspeake 2021-06-11 02:46:53
我正在重新編寫我們用 golang 編寫的小型 Web 應用程序的日志記錄。由于外部要求,日志記錄已被隔離在一個地方,因此我們以后可能會切換到日志記錄服務器。(不是我的想法 - 我保證......)盡管如此,我們現在能夠記錄常見的事情,如日期/時間、行號、用戶和消息,主要使用標準庫的一部分和我們傳遞的用戶/會話結構大約。但是 - 問題來了 - 在較低級別的方法中,為了記錄而傳遞會話只是為了獲取用戶名是一種浪費。所以我想找到其他東西來在日志文件中找到一個特定的請求。我確信有一些我沒有想到的明顯的東西。到目前為止的想法:Java 日志框架可以打印出線程 id,這在這種情況下也足夠了。只是它在golang中被稱為其他東西?以某種方式使用戶/會話結構可以全局訪問。(除非有一個線程用作查找鍵,否則仍然需要傳遞會話 ID。回到想法 1。)無論如何放棄并傳遞用戶/會話結構。不要在最低級別記錄錯誤,而只在用戶/會話結構可用時記錄錯誤。不過行號不會那么好。我們將 gorilla 的一部分用于網絡事物,除此之外主要是標準庫。對此有何建議和想法?
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

由于濫用的可能性很高,因此無法訪問 Go 中當前 goroutine 的標識符。這可能看起來很嚴厲,但這實際上保留了 Go 包生態系統的一個重要屬性:是否啟動一個新的 goroutine 來做某事并不重要。


也就是說,對于函數 F 的任何方法:


F()

幾乎完全等同于:


done := make(chan struct{})

go func() {

   defer close(done)

   F()

}

<-done

(“幾乎”來自這樣一個事實,如果 F 恐慌,恐慌將不會被原始 goroutine 捕獲)。


這也適用于日志記錄 - 如果您使用當前的 goroutine 來推斷當前用戶,則任何如上所述啟動新 goroutine 的代碼都會破壞該假設,并且您的日志記錄將不包含預期的信息。


您需要傳遞某種上下文。


查看完整回答
反對 回復 2021-06-28
  • 1 回答
  • 0 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號