精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Gorm慢查詢、SQL日志與Go項目日志的整合與串聯

開發 項目管理
我們同樣會為GORM日志注入追蹤ID,把它們歸因到關聯的請求上下文中去。這樣一旦發生數據庫相關的錯誤,我們可以通過監控主動發現、使用錯誤日志中的追蹤ID還能把整個請求相關的日志都檢索出來,查問題也會輕松很多。

如果僅集成到這個程度,功能開發完全沒有問題,但如果你還要長期維護項目的話,那么問題可大了去了。

原因是,GORM產生的SQL記錄、慢查詢、以及數據庫錯誤都是通過GORM自身的GormLogger寫到日志的,而且GormLogger默認是寫到標準輸出的。。。而不是項目本身的日志文件里,這樣一來如果真的是SQL錯誤、慢查詢等導致的Bug,你只能知道發生Error了,但是在項目日志里卻找不到Error的明細,那你解決BUG就只能靠猜和試啦。

圖片圖片

所以這節內容我們介紹怎么把GORM日志和項目日志整合到一起,讓你擁有下面這樣的SQL詳細信息

{
    "level": "debug",
    "ts": "2024-10-09T17:09:07.603+0800",
    "msg": "SQL DEBUG",
    "sql": "INSERT INTO `orders` (`user_id`,`bill_money`,`order_no`,`state`,`is_del`,`created_at`,`updated_at`) VALUES (123453453,20,'20240627596615375920904456',1,0,'2024-10-09 17:09:07.586','2024-10-09 17:09:07.586')",
    "rows": 1,
    "dur(ms)": 53,
    "traceid": "19d822280c64c5ed",
    "spanid": "450ccc402492ed45",
    "pspanid": "",
    "file": "gormlog.go",
    "line": 49
}

支持慢查詢、SQL錯誤的詳細記錄,在開發環境還會增加SQL DEBUG輸出把執行的SQL語句輸出到日志文件和控制臺,方便在開發階段進行調試和驗證。

我們同樣會為GORM日志注入追蹤ID,把它們歸因到關聯的請求上下文中去。這樣一旦發生數據庫相關的錯誤,我們可以通過監控主動發現、使用錯誤日志中的追蹤ID還能把整個請求相關的日志都檢索出來,查問題也會輕松很多。

加入項目后訪問https://github.com/go-study-lab/go-mall/compare/c6...c7 能查看我們在項目中定制化GORM的整個過程

圖片圖片

Gorm Logger Interface

GORM 允許我們自定義Logger把它執行的數據庫記錄、產生的錯誤等都記錄到項目自身的日志文件中去,

V1版本的GROM的 logger 接口長這個樣子,僅僅提供了一個Print方法,Print方法的參數都是 create、updates、query 這些方法的回調中傳遞過去的,我們并沒有辦法傳遞Context。

type logger interface {
 Print(v ...interface{})
}

所以前幾年的項目流行使用GLS -- Goroutine Local Storage,因為官方不推薦也不認可GLS這個概念,GLS的實現都是第三方庫,前幾年我之前公司項目自己封裝的Logger里就大量使用 jtolio/gls 這個庫實現的GLS。

后來做新項目時我曾經還想偷懶直接使用之前公司的Logger,結果發現Go 1.19 版本以上 jtolio/gls 這個庫就不能用了。

jtolio/gls 倉庫地址: https://github.com/jtolio/gls

好在GORM在V2 版本的Logger 中增加了Context 回調的能力,這樣就能把執行SQL時的上下文信息也記錄到日志中來,這點在V1 版本是做不到的。

在GORM V2 中它新增了以下Logger 接口 logger.Interface:

type Interface interface {  
   LogMode(LogLevel) Interface  
   Info(context.Context, string, ...interface{})  
   Warn(context.Context, string, ...interface{})  
   Error(context.Context, string, ...interface{})  
   Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error)  
}

每個方法都有應用的上下文Context參數傳遞進來,還專門提供了Trace方法讓我們實現,供我們實現查詢的SQL語句和消耗時間的記錄。

接下來我們開始自定義GORM Logger,其中使用上我們前面已經封裝好的項目的日志門面,通過日志門面實現把GORM日志和項目日志記錄到同一個地方。

實現GormLogger 把GORM日志整合到項目日志

現在我們在項目的 dal/dao 目錄下新建gormlog.go 文件,并添加以下代碼。

type GormLogger struct {
 SlowThreshold time.Duration
}

func NewGormLogger() *GormLogger {
 return &GormLogger{
  SlowThreshold: 500 * time.Millisecond,
}

新建GormLogger類型,在類型中的字段 SlowThreshold 用于設置慢查詢的門檻,我們在這里設置超過500ms 就是慢查詢,如果需要按環境定制化, 就把這個做成配置項放到配置文件中去。

接下來用GormLogger 實現上面GORM的logger.Interface 中定義的所有方法:

func (l *GormLogger) LogMode(lev gormLogger.LogLevel) gormLogger.Interface {
 return &GormLogger{}
}
func (l *GormLogger) Info(ctx context.Context, msg string, data ...interface{}) {
 logger.New(ctx).Info(msg, "data", data)
}
func (l *GormLogger) Warn(ctx context.Context, msg string, data ...interface{}) {
 logger.New(ctx).Error(msg, "data", data)
}
func (l *GormLogger) Error(ctx context.Context, msg string, data ...interface{}) {
 logger.New(ctx).Error(msg, "data", data)
}
func (l *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) {
 // 獲取運行時間
 duration := time.Since(begin).Milliseconds()
 // 獲取 SQL 語句和返回條數
 sql, rows := fc()
 // Gorm 錯誤時記錄錯誤日志
 if err != nil {
  logger.New(ctx).Error("SQL ERROR", "sql", sql, "rows", rows, "dur(ms)", duration)
 }
 // 慢查詢日志
 if duration > l.SlowThreshold.Milliseconds() {
  logger.New(ctx).Warn("SQL SLOW", "sql", sql, "rows", rows, "dur(ms)", duration)
 } else {
  logger.New(ctx).Debug("SQL DEBUG", "sql", sql, "rows", rows, "dur(ms)", duration)
 }
}

注意因為GORM的logger包跟我們自己的日志門面 logger 包名稱沖突了,所以在導入包的時候要給它設置gormLogger這個別名。

上面的實現主要的邏輯是對Trace方法的重寫,GORM在執行SQL回調Trace方法時,會把執行開始的時間、執行的SQL、返回的函數以及執行中的錯誤告訴我們。如果執行中發生錯誤就記錄錯誤日志,如果消耗時間超過我們約定的500ms就記一條Warn級別的日志。

責任編輯:武曉燕 來源: 網管叨bi叨
相關推薦

2017-04-01 19:00:25

MySQL慢查詢

2018-10-12 16:45:10

MySQL查詢日志數據庫

2023-11-17 12:11:26

GORMGo Web

2010-11-25 16:29:26

MySQL慢日志查詢

2011-06-28 08:32:40

MySQL慢查詢日志

2023-09-01 07:31:24

2017-09-18 15:20:02

MySQL慢查詢日志配置

2024-03-25 07:30:03

MySQL數據庫SQL日志

2010-11-26 14:17:11

SQL

2022-05-17 08:24:58

查詢日志MySQL

2017-05-23 16:26:26

MySQL優化處理

2022-07-14 14:46:51

數據庫SQL系統設計

2022-12-26 00:48:38

2018-08-02 16:10:50

MySQL數據庫清理

2010-06-29 09:56:00

SQL Server查

2021-03-25 16:15:24

SQL工具慢查詢

2023-05-26 08:21:59

Lock_TimeMySQL

2025-01-15 09:21:01

2023-11-28 08:52:48

Go日志庫

2021-05-14 11:05:38

MySQL慢日志數據庫
點贊
收藏

51CTO技術棧公眾號

成人毛片在线| 亚洲欧美一区二区三| 久久精品高清| 欧美日韩精品欧美日韩精品| 精品综合在线| 国产婷婷色一区二区在线观看| 国产精品亚洲a| 婷婷丁香一区二区三区| 久久成人一区| 国产亚洲视频中文字幕视频| 中文字幕国产传媒| 69av在线| 羞羞答答国产精品www一本| 亚洲视频第一页| av免费一区二区| 久草成色在线| 久久久久久一二三区| 日韩av手机在线| av激情在线观看| 国产主播性色av福利精品一区| 亚洲国产成人高清精品| 国产一级特黄a大片99| 日本久久综合网| 亚洲女同另类| 日韩精品久久久久久久玫瑰园| 91av在线免费播放| 天堂成人av| 久久久久国产精品厨房| 成人在线精品视频| 久久久久免费看| 精品伊人久久久| 欧洲在线/亚洲| 2022中文字幕| 北岛玲一区二区三区| 国产情侣一区| 蜜臀久久99精品久久久无需会员 | 在线播放中文一区| 俄罗斯av网站| 国产大学生校花援交在线播放| 国产电影一区在线| 国产成人精品视频| 九九热精品在线观看| 欧美亚洲在线日韩| 91精品国产丝袜白色高跟鞋| 欧美性高潮在线| 成人黄色网免费| 日日摸天天添天天添破| 中出一区二区| 日韩在线中文字幕| 亚洲欧美综合视频| 精品网站在线| 一区二区三区免费| 亚洲一区二区精品在线观看| 日韩欧美在线观看一区二区| 国产精品一区在线观看你懂的| 国产精品国产福利国产秒拍 | 亚洲一级淫片| 色偷偷91综合久久噜噜| 国产伦精品一区二区免费| 日韩深夜福利网站| 欧美专区亚洲专区| 日韩avxxx| 性感女国产在线| 亚洲成人av中文| 国产曰肥老太婆无遮挡| 亚洲综合伊人久久大杳蕉| 最好看的中文字幕久久| 日韩精品一区二区三区丰满| 天天综合在线视频| 99精品欧美一区二区三区综合在线| 5566av亚洲| 国产国语亲子伦亲子| 国产一区二区毛片| 91深夜福利视频| 国产三区在线播放| 国产在线一区二区| 亚洲在线免费观看| 国产又粗又猛视频| 国产资源精品在线观看| 2019国产精品视频| 日韩精品一区不卡| 肉丝袜脚交视频一区二区| 欧美亚洲伦理www| 欧美亚韩一区二区三区| 一本一本久久| 久久综合综合久久综合| 国产亚洲免费的视频看| 色一情一交一乱一区二区三区| 无码日韩精品一区二区免费| 国产婷婷色综合av蜜臀av| 国产福利在线观看视频| 欧美性生活一级片| 日韩av影院在线观看| 五月婷婷综合在线观看| 伊人久久大香线蕉av不卡| 亚洲欧美一区二区激情| 女人黄色一级片| 希岛爱理一区二区三区| 久久久久久av| 久久免费少妇高潮99精品| 国产日韩欧美高清免费| 国产精品老女人视频| 97视频免费在线| 国产精品91一区二区| 国产偷国产偷亚洲高清97cao| 日本久久一级片| 久久久久久久久97黄色工厂| 精品乱色一区二区中文字幕| 福利片在线观看| 18成人在线观看| 真人抽搐一进一出视频| 92久久精品| 欧美亚洲综合在线| 特种兵之深入敌后| 狠狠色丁香婷婷综合影院| 日韩精品免费在线视频| 岛国片在线免费观看| 在线观看日韩av电影| 国产精品国模在线| 国产日韩欧美视频在线观看| 91视视频在线观看入口直接观看www | 国产精品97| 97超碰色婷婷| 亚洲天堂一二三| 不卡视频一二三| 中文字幕99| 五月开心播播网| 99热在线只有精品| 久久综合狠狠综合久久激情| 亚洲欧美精品| 日韩伦理在线一区| 欧美一卡在线观看| www.色天使| 99久久九九| 欧美激情国产日韩精品一区18| 无码人妻丰满熟妇区bbbbxxxx| 国产成人超碰人人澡人人澡| 久久96国产精品久久99软件| 色视频在线免费观看| 欧美日韩加勒比精品一区| 91国内在线播放| 美女久久久久| 国语自产精品视频在线看抢先版图片 | 午夜影院在线播放| 日韩一级完整毛片| 小早川怜子久久精品中文字幕| 伊人色**天天综合婷婷| 国产精品日韩在线一区| 香蕉av在线播放| 亚洲永久免费av| 手机在线视频一区| 欧美xxxxx视频| 国产精品成久久久久三级| 天天操天天舔天天干| 亚洲一区二区三区不卡国产欧美| 国产精品区在线| 精品久久美女| 国产成人av网址| 亚洲欧美强伦一区二区| 椎名由奈av一区二区三区| 免费裸体美女网站| 任你躁在线精品免费| 欧美成人sm免费视频| 青青青国产在线| 成人免费av在线| 福利视频久久| 影音先锋男人资源在线| 91精品综合久久久久久| 国产免费一区二区三区四区| 久久一日本道色综合久久| 欧美一区二区在线视频观看| 亚洲无人区码一码二码三码| 国产午夜精品一区在线观看| 中文字幕亚洲欧美日韩在线不卡| 99re这里只有精品在线| 50一60岁老妇女毛片| 欧美va在线| 午夜亚洲福利老司机| 欧美日韩第一页| 国产婷婷在线视频| 国产女同互慰高潮91漫画| 在线免费观看av的网站| 精品一区电影| 国产成人精品在线播放| 99reav在线| 欧美疯狂做受xxxx富婆| 欧美做爰爽爽爽爽爽爽| 国产白丝网站精品污在线入口| 制服国产精品| 亚洲无线观看| 97视频在线看| 国产69久久| 7777精品伊人久久久大香线蕉超级流畅| 白丝女仆被免费网站| 99热这里只有成人精品国产| 国产男女猛烈无遮挡91| 日韩在线观看www| 91精品福利视频| www.com.av| 国产成人欧美日韩在线电影| 欧美日本视频在线观看| 欧美日韩夜夜| 91精品国产综合久久香蕉最新版 | аⅴ资源新版在线天堂| 欧美精品免费视频| 五月天综合在线| 欧美国产乱子伦| 天堂va欧美va亚洲va老司机| 国产主播精品| 91福利区一区二区三区| 国产精品波多野结衣| 日本精品视频| 日韩免费中文字幕| 污影院在线观看| 日韩成人在线视频网站| 亚洲熟女乱色一区二区三区久久久| 亚洲精品视频一区| 中文字幕av网址| 捆绑紧缚一区二区三区视频| 亚洲美免无码中文字幕在线| 日本大胆欧美| 99国产超薄丝袜足j在线观看| 国产自产自拍视频在线观看| 亚洲精品成a人在线观看| 国产精品久久久久久久久久久久久久久久| 一区二区视频在线| 谁有免费的黄色网址| 成人午夜免费av| 久热精品在线播放| 亚洲影院免费| 国产毛片久久久久久国产毛片| 清纯唯美日韩| 欧美日本韩国国产| 北条麻妃一区二区三区在线观看 | 国产精品福利一区二区三区| 久久精品无码一区二区三区毛片 | 亚洲精品美女在线观看播放| 国产人妻精品一区二区三| 欧洲国内综合视频| 日本高清www免费视频| 日本一区二区动态图| 人妻熟女aⅴ一区二区三区汇编| 日本系列欧美系列| 亚洲熟女乱色一区二区三区| 中文无码久久精品| 制服国产精品| 国产精品一区二区av日韩在线| 国模一区二区三区私拍视频| 日韩综合一区二区三区| 成人网在线视频| 成人四虎影院| 国产精品jvid在线观看蜜臀 | 99国产精品免费网站| 成人免费在线视频网址| 福利一区二区免费视频| 欧美亚洲在线观看| 亚洲天堂电影| 羞羞视频在线观看欧美| 综合操久久久| 亚洲精品国模| 久久草.com| 亚洲成人黄色| 91久久精品一区二区别| 欧美一区=区三区| 国产精品69av| 欧美a视频在线| 国产精品久久久久77777| 午夜伦理福利在线| 日韩免费av一区二区| 三妻四妾的电影电视剧在线观看| 欧美成人午夜剧场免费观看| 影院在线观看全集免费观看| 欧美黑人xxxx| 僵尸再翻生在线观看免费国语| 性色av一区二区三区免费| 俄罗斯一级**毛片在线播放| 欧美精品999| 日韩欧美一起| 国内揄拍国内精品| 欧洲av不卡| 日韩免费av在线| 国产精品99精品一区二区三区∴| 国产区精品视频| 日韩精品视频在线看| 国产精品区一区二区三在线播放 | 91n.com在线观看| 久久国产婷婷国产香蕉| 先锋资源在线视频| 性欧美xxxx免费岛国不卡电影| 欧美天堂在线观看| 中文字幕在线字幕中文| 黄色一区二区在线| 亚洲高清毛片一区二区| 在线观看不卡一区| 精品久久久久中文慕人妻| 亚洲精品国产精品国自产在线 | 国产黄a三级三级三级av在线看| 在线观看亚洲视频| 黄a在线观看| 韩国国内大量揄拍精品视频| 性欧美1819sex性高清| 91亚洲国产精品| 凹凸成人在线| 亚洲成人自拍| 亚洲v在线看| 久久精品国产精品亚洲色婷婷| 国产日韩精品视频一区二区三区 | 日本免费在线精品| 国产电影一区| 九色综合日本| 午夜国产一区二区| 阿v天堂2017| 另类中文字幕网| 日本三级日本三级日本三级极| 中文字幕免费在线观看视频一区| 麻豆亚洲av成人无码久久精品| 亚洲一二三区视频| 久久久免费精品视频| 亚洲色偷精品一区二区三区| 久久精品99久久久香蕉| 黄页网站在线| 成人高清视频观看www| 欧洲vs亚洲vs国产| 一区二区三区偷拍| 欧美一区=区| 色偷偷中文字幕| 91蝌蚪porny| 免费麻豆国产一区二区三区四区| 精品久久久久久久久久久久久久| 在线观看中文字幕2021| 亚洲国产另类 国产精品国产免费| 欧美三级电影一区二区三区| 午夜精品蜜臀一区二区三区免费 | 亚洲成人福利片| 国产三级视频在线播放| 精品视频一区在线视频| 丁香花电影在线观看完整版| 91最新在线免费观看| 国产一区二区三区日韩精品| 91传媒久久久| 成人av片在线观看| 波多野结衣爱爱视频| 色综合色综合色综合| 神马一区二区三区| 欧美福利视频在线| 九九热这里有精品| 日本高清一区| 中文精品电影| 男人的天堂最新网址| 欧美激情综合网| 久久国产视频精品| 亚洲精品国产欧美| 999av小视频在线| 国产区精品视频| 91久久夜色精品国产按摩| 蜜桃免费在线视频| aa级大片欧美| 日本一区二区三区四区五区| 91久久香蕉国产日韩欧美9色| 刘亦菲久久免费一区二区| 日韩有码视频在线| segui88久久综合9999| 国产精品免费在线| 一本色道久久| 欧美大片免费播放器| 亚洲一级电影视频| 亚洲h视频在线观看| 欧美极品少妇xxxxx| 国产精品国产| 青青青免费在线| 99热这里都是精品| 日韩精品1区2区| 亚洲女同精品视频| 亚洲一区二区三区四区| 五月天综合网| 久久精品黄色片| 在线观看国产日韩| 成人免费在线电影| 亚洲 日韩 国产第一| 国产调教精品| 又粗又黑又大的吊av| 国产91精品露脸国语对白| 免费在线一级片| 精品国产sm最大网站| www.超碰在线| 亚洲va韩国va欧美va精四季| 狠狠色丁香久久婷婷综合丁香| 波多野结衣喷潮| 欧美一级片在线看| 日韩深夜视频| 自拍偷拍一区二区三区| 91视频91自| 国产又粗又猛视频| 欧美巨大黑人极品精男| 91欧美极品| 日韩少妇内射免费播放| 亚洲日本一区二区三区| 欧美一区二不卡视频| 韩国19禁主播vip福利视频| 日韩精品一区二区三区免费观看|