精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲免费一级片| 久久9999久久免费精品国产| 国产成年精品| 亚洲第一成人在线| 视频一区视频二区视频| 国产超碰人人模人人爽人人添| 亚洲国产一区二区三区a毛片| 亚洲欧美国产视频| 日韩欧美中文视频| 日韩中文在线播放| 亚洲午夜国产一区99re久久| 午夜欧美性电影| 熟妇高潮一区二区三区| 另类小说欧美激情| 18一19gay欧美视频网站| 久草手机视频在线观看| 亚洲深夜福利在线观看| 日韩情涩欧美日韩视频| 嫩草影院国产精品| 亚洲欧美se| 亚洲综合图片区| 亚洲一区二区免费视频软件合集| 天天色综合av| 精品一区二区在线播放| 国产精品久久久av| www..com国产| 一区在线免费观看| 欧美乱大交xxxxx| 欧美激情 一区| 欧洲在线一区| 精品国产免费久久| 国产成人黄色网址| 日韩三区在线| 欧美性黄网官网| 少妇高潮毛片色欲ava片| 18加网站在线| 国产精品久久777777| 涩涩日韩在线| 国产三区四区在线观看| 91麻豆蜜桃一区二区三区| 国产美女精品在线观看| www.成人在线观看| 国产乱子轮精品视频| 91精品久久久久久久久久入口 | 欧美综合久久| 亚洲视频第一页| av中文字幕免费观看| 小嫩嫩12欧美| 亚洲人高潮女人毛茸茸| 中日韩精品一区二区三区| 欧美黄色网视频| 日韩精品久久久久久福利| av鲁丝一区鲁丝二区鲁丝三区| 97久久超碰| 日韩av在线最新| 欧美 日本 国产| 蜜桃成人av| 亚洲欧美一区二区三区久久| xxxx日本免费| 成人毛片免费看| 久久精品99久久久香蕉| 亚洲欧美精品aaaaaa片| 亚洲成人精品| 欧美黄色片视频| 国产精品xxxx喷水欧美| 国产一区二区三区久久久久久久久 | av软件在线观看| 亚洲精品伦理在线| 欧美国产日韩激情| 在线免费看h| 欧美性猛片aaaaaaa做受| 中文av一区二区三区| 欧美美女福利视频| 日韩无一区二区| 毛茸茸free性熟hd| 久久91麻豆精品一区| 中文字幕不卡av| 欧美三级日本三级| 99精品视频免费观看视频| 国产精品第100页| 国产免费黄色片| 99视频有精品| 亚洲欧洲精品一区| 国产白丝在线观看| 在线视频国产一区| 无码国产精品一区二区高潮| 日本一道高清一区二区三区| 中文字幕日韩视频| 久草视频精品在线| 毛片av一区二区三区| 成人一区二区三区四区| 国产主播福利在线| 一区二区在线观看av| 久久久免费视频网站| 婷婷久久免费视频| 日韩精品极品在线观看播放免费视频| 免费一级特黄3大片视频| 亚洲天堂成人| 国产精品香蕉在线观看| 免费成人在线看| 国产精品免费av| 成人性免费视频| 日日夜夜亚洲精品| 亚洲另类激情图| 毛片aaaaa| 麻豆精品国产传媒mv男同| 国产一区免费在线观看| 九七电影韩国女主播在线观看| 黑人狂躁日本妞一区二区三区| 亚洲综合20p| 国产精品一区二区av交换| 久久久久久伊人| 97caocao| 中文字幕免费一区| 男人天堂999| 99亚洲乱人伦aⅴ精品| 日韩资源在线观看| 懂色av蜜臀av粉嫩av分享吧最新章节| 高清不卡一二三区| 公共露出暴露狂另类av| jvid一区二区三区| 亚洲另类xxxx| 1级黄色大片儿| 成人免费视频国产在线观看| 特级毛片在线免费观看| 成人精品国产| 亚洲视频自拍偷拍| 你懂的国产在线| 99久久精品免费观看| 成人免费看片'免费看| 97色婷婷成人综合在线观看| 在线日韩欧美视频| 国产免费www| 国产亚洲精品资源在线26u| 男女啪啪免费视频网站| 高清一区二区三区| 欧美—级a级欧美特级ar全黄| 国产日本精品视频| 国产精品国产三级国产aⅴ入口| 天天操天天爽天天射| 欧美日韩直播| 5278欧美一区二区三区| 色呦呦视频在线| 五月天精品一区二区三区| 乱码一区二区三区| 一区视频在线| 久久福利电影| 欧美91看片特黄aaaa| 日韩高清av在线| 一区二区三区福利视频| 大陆成人av片| 亚洲人精品午夜射精日韩| 老汉色老汉首页av亚洲| 26uuu国产精品视频| 外国精品视频在线观看| 性感美女久久精品| 99久久人妻精品免费二区| 亚洲欧美激情诱惑| 日本免费高清不卡| 国产精品久久久久久吹潮| 久久精品视频在线播放| 国产成人免费看一级大黄| 亚洲综合在线第一页| 日韩av手机在线播放| 欧美在线综合| 亚洲精品视频一二三| 久久wwww| 国产69精品久久久久久| 国产毛片av在线| 91精品国产美女浴室洗澡无遮挡| 青娱乐免费在线视频| 99麻豆久久久国产精品免费| 国产真人无码作爱视频免费| 五月天久久网站| 国产精品久久久久久久小唯西川| 最新欧美色图| 久久久国产精品亚洲一区| 欧美特级特黄aaaaaa在线看| 一本到不卡免费一区二区| 国产福利视频网站| heyzo一本久久综合| 久久久国产欧美| 国产综合久久| 日韩免费电影一区二区| 麻豆国产一区二区三区四区| 欧美在线国产精品| 日本综合在线| 日韩电影中文字幕在线观看| 伊人成人在线观看| 亚洲国产日韩一区二区| 日本美女xxx| 成人动漫一区二区三区| 午夜免费福利在线| 亚洲一级一区| 在线视频亚洲自拍| 国产福利一区二区精品秒拍| 国产精品视频一区二区三区四| 伦理av在线| 日韩在线激情视频| 午夜视频在线播放| 欧美一区二区三区视频在线观看| 国产高清中文字幕| 一区二区三区美女| 9.1片黄在线观看| 波多野结衣一区二区三区| 潘金莲激情呻吟欲求不满视频| 在线观看日韩av电影| 亚洲永久一区二区三区在线| 日韩中文av| 成人午夜电影免费在线观看| 日韩黄色三级| 国产精品www网站| 国产精品电影| 欧美激情一区二区三级高清视频| 日本在线人成| 亚洲天堂av综合网| 天堂av在线免费| 日韩精品在线一区二区| 一级黄色录像大片| 欧美四级电影在线观看| 亚洲AV无码成人精品区东京热| 一区二区免费看| 黄色片子在线观看| 国产精品青草久久| 老熟妇一区二区| 久久久久久毛片| 三级男人添奶爽爽爽视频| 粉嫩一区二区三区性色av| 超碰中文字幕在线观看| 狠狠色综合色综合网络| 国产成人美女视频| 日韩**一区毛片| 日本激情视频在线| 久久久久一区| 毛片av免费在线观看| 亚洲影音一区| 欧美 日韩精品| 亚洲综合日韩| 日本在线观看a| 性色一区二区三区| 欧美牲交a欧美牲交aⅴ免费真 | 天堂网在线免费观看| 丝袜美腿亚洲色图| mm1313亚洲国产精品无码试看| 久久九九99| 九一精品在线观看| 日韩国产欧美在线播放| 性欧美极品xxxx欧美一区二区| 日本不卡一二三区黄网| 麻豆三级在线观看| 久久精品国产亚洲一区二区三区| 中文字幕第38页| 国产美女在线观看一区| 91亚洲一线产区二线产区 | 日韩精品在线一区二区| 丰满人妻一区二区三区四区53 | www.超碰97| 97久久超碰国产精品| 欧美无砖专区一中文字| 日本三级2019| 日韩人体视频一二区| 亚洲精品一区二三区| 欧美精品18+| www.色视频| 日韩av中文字幕在线免费观看| 免费在线一级视频| 色妞一区二区三区| 中文字幕中文字幕在线中高清免费版| 欧美激情第一页xxx| 男人久久天堂| 国产精品一区二区久久精品| 国产高清视频一区二区| 国产九色91| 精品一二三区| 亚洲av综合色区| 亚洲欧美日韩视频二区| 亚欧美在线观看| 顶级嫩模精品视频在线看| 香蕉网在线播放| 亚洲色图欧洲色图婷婷| 黄色一级片免费看| 欧美欧美欧美欧美| 日日夜夜精品免费| 视频直播国产精品| 91美女主播在线视频| 国产精品久久久久久久久久免费 | 亚洲国产欧美一区二区丝袜黑人 | 美女搡bbb又爽又猛又黄www| 久久嫩草精品久久久久| 精品国产视频在线观看| 日韩欧美亚洲成人| 国产情侣在线播放| 亚洲一区二区精品| 久久亚洲资源| 国产日韩在线播放| 亚洲精品亚洲人成在线| 黑人巨茎大战欧美白妇| 视频一区二区三区中文字幕| 在线播放av网址| 国产精品少妇自拍| 国产成人无码精品久在线观看 | 午夜国产一区二区| 日本免费不卡一区二区| 国产一区二区三区香蕉| 亚洲最大成人综合网| 婷婷成人综合网| xxxwww在线观看| 精品国产自在精品国产浪潮| 不卡一二三区| 国产另类自拍| 欧美日本久久| 国产免费中文字幕| 国产日韩欧美麻豆| 精品在线播放视频| 亚洲福利小视频| 色噜噜狠狠狠综合欧洲色8| 国产日韩欧美视频在线| 台湾佬综合网| heyzo亚洲| 成人福利视频在线看| 永久免费看黄网站| 91精品国产综合久久婷婷香蕉| youjizz在线播放| 国产不卡av在线免费观看| 久久99精品国产自在现线| 欧美日韩视频免费| 日本不卡在线视频| 五月婷六月丁香| 在线免费观看日本欧美| 毛片免费在线观看| 欧洲精品毛片网站| 欧美精品中文| 免费 成 人 黄 色| 99视频精品全部免费在线| 国产在线视频第一页| 日韩欧美专区在线| 在线观看wwwxxxx| 波多野结衣一区二区三区在线观看| 影视一区二区| 国产精品熟女一区二区不卡| 亚洲色图丝袜美腿| 性一交一乱一色一视频麻豆| 欧美国产日韩一区二区在线观看| 精品国模一区二区三区欧美 | 明星裸体视频一区二区| 国产精品一区亚洲| 熟女俱乐部一区二区视频在线| 色婷婷综合视频在线观看| 国产鲁鲁视频在线观看免费| 国产精品成人va在线观看| 波多野结衣一区| 五月天开心婷婷| 一区二区三区在线免费播放 | 日韩中文一区二区| 成人午夜免费在线视频| 成人午夜激情视频| 国产免费观看av| 一个人www欧美| 国产精品99久久免费| 青青视频免费在线| 不卡的看片网站| 蜜臀尤物一区二区三区直播| 一区二区在线视频| 精品91福利视频| 成人午夜视频在线观看免费| 久久嫩草精品久久久精品| 亚洲视频在线观看免费视频| 欧美精品在线播放| 日韩有码一区| 手机版av在线| 亚洲成人综合视频| 免费a级毛片在线观看| 成人h视频在线| 亚洲国产高清一区二区三区| 国产美女免费无遮挡| 欧美丰满一区二区免费视频| av岛国在线| 亚洲视频欧美在线| 成人免费精品视频| 黄色av一区二区| 久久99国产精品久久久久久久久| 色婷婷av一区二区三区丝袜美腿| 中文字幕天天干| 亚洲第一久久影院| av在线播放免费| 成人欧美一区二区三区视频xxx | 亚洲最大av| 北岛玲一区二区| 欧美精品777| 免费成人动漫| 男人添女人下部视频免费| 国产亚洲va综合人人澡精品| 精品人妻久久久久一区二区三区 | 精品人妻av一区二区三区| 国产不卡视频在线| 欧美日韩亚洲国产精品| 谁有免费的黄色网址| 亚洲第一精品久久忘忧草社区| 国产精品久久乐| 久久久久久久激情|