golang 集成sentry:PostgreSQL

本文介绍通过 pgx库集成sentry, pgx 特点是速度快,可以完全控制,并且支持所有 postgres 数据类型。

pgx地址: https://github.com/jackc/pgx

最简单的接入方式是自定义一个logger, 然后注入到pgx, 完整示例如下

package mainimport ("context""log""os""time""github.com/getsentry/sentry-go""github.com/jackc/pgx/v4""github.com/jackc/pgx/v4/log/logrusadapter""github.com/jackc/pgx/v4/pgxpool""github.com/sirupsen/logrus"
)// TracingLogger does two things at once, logging and tracing
type TracingLogger struct {logger *logrusadapter.Logger
}func NewTracingLogger(logger logrus.FieldLogger) *TracingLogger {return &TracingLogger{logger: logrusadapter.NewLogger(logger)}
}func (l *TracingLogger) Log(ctx context.Context, level pgx.LogLevel, msg string, data map[string]interface{}) {l.logger.Log(ctx, level, msg, data)span := sentry.StartSpan(ctx, "postgres "+msg)defer span.Finish()if data != nil {if span.Data == nil {span.Data = make(map[string]interface{})}for key, value := range data {value, ok := value.(string)if ok {span.Data[key] = value}}// since this method is called after a query is done,// we need to correct span start timeexecTime, ok := data["time"].(time.Duration)if ok {span.StartTime = time.Now().Add(-execTime)}}
}func main() {err := sentry.Init(sentry.ClientOptions{Debug:              true,Dsn:                "https://a5eac4fa3396cbfac8fb4baa6a9c03a3@o4504291071688704.ingest.sentry.io/4506715873804288",AttachStacktrace:   true,EnableTracing:      true,SampleRate:         1.0,TracesSampleRate:   1.0,ProfilesSampleRate: 1.0,})if err != nil {log.Fatalf("sentry.Init: %s", err)}defer sentry.Flush(2 * time.Second)config, err := pgxpool.ParseConfig(os.Getenv("DATABASE_URL"))if err != nil {log.Fatal(err)}logger := logrus.New()config.ConnConfig.Logger = NewTracingLogger(logger)conn, err := pgxpool.ConnectConfig(ctx, config)if err != nil {log.Fatal(err)}defer conn.Close()ctx := context.Background()tx := sentry.StartTransaction(ctx, "test_pgx")defer tx.Finish()ctx = tx.Context()err = conn.QueryRow(ctx, "SELECT 1").Scan()if err != nil {log.Fatal(err)}
}

参考:
https://anymindgroup.com/news/tech-blog/15724/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/678336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】信号概念与信号产生

信号概念与信号产生 一、初识信号1. 信号概念2. 前台进程和后台进程3. 认识信号4. 技术应用角度的信号 二、信号的产生1. 键盘组合键2. kill 命令3. 系统调用4. 异常(1)观察现象(2)理解本质 5. 软件条件闹钟 一、初识信号 1. 信号…

任务管理软件的实用价值及优选推荐:提升工作效率的利器

任务管理软件是一种用于组织任务、将任务分配给个人并监控其进展的软件。该软件可以帮助确保任务在预算内按时完成。它在协同工作环境中特别有用,在这种环境中多人在处理需要跟踪和监视的任务。无论是初创公司、中小型企业还是大型组织,都可以从任务管理…

【Linux】make和Makefile

目录 make和Makefile make和Makefile 我们使用vim编辑器的时候,在一个文件里写完代码要进行编译,要自己输入编译的指令。有没有一种可以进行自动化编译的方法——makefile文件,它可以指定具体的编译操作,写好makefile文件&#x…

电磁兼容故障整改-辐射发射超标

设备的辐射于扰发射超标有两种可能:一种是设备外壳的屏蔽性能不完善;另一种是射频干扰经由电源线和其他线缆逸出。判断方法是拔掉不必要的电线和电源插头,或者将电缆长度减小至最短,继续做试验,如果没有任何改善迹象,则应怀疑是设…

Peter算法小课堂—单调队列

祝大家新年快乐! 今天这一次有点简单。 单调队列有两个要点,一个是单调,另一个就是我们的队列。 听到队列,我相信大家一定会想到它的好朋友BFS吧。但是……今天……可……没……那么……简单哦。 西佳佳偶像天团1 题目描述 …

滑动窗口的最大值

题目 239. 滑动窗口最大值 - 力扣(LeetCode) 思路 使用一个队列充当不断滑动的窗口,每次滑动记录其中的最大值: 如何在 O(1) 时间计算最大值,只需要一个特殊的数据结构「单调队列」,push 方法依然在队尾添…

Edge浏览器-常用快捷键

按键组合作用Ctrl Shift I开发人员工具Ctrl E定位到 空地址栏Ctrl L定位到 地址栏Ctrl Shift B显示或隐藏 收藏夹栏Ctrl Shift O打开收藏夹(搜索)Ctrl T打开一个新标签页Ctrl W关闭当前标签页Ctrl Shift T重新打开刚才关闭的标签页Ctrl Tab切换到下一个标签页Ctrl…

分布式搜索引擎 elasticsearch

分布式搜索引擎 elasticsearch 第一部分 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在GitHub搜索…

【EAI 016】VIMA: General Robot Manipulation with Multimodal Prompts

论文标题:VIMA: General Robot Manipulation with Multimodal Prompts 论文作者:Yunfan Jiang, Agrim Gupta, Zichen Zhang, Guanzhi Wang, Yongqiang Dou, Yanjun Chen, Li Fei-Fei, Anima Anandkumar, Yuke Zhu, Linxi Fan 作者单位:Stanfo…

【Spring源码分析】Spring的启动流程源码解析

阅读此需阅读下面这些博客先【Spring源码分析】Bean的元数据和一些Spring的工具【Spring源码分析】BeanFactory系列接口解读【Spring源码分析】执行流程之非懒加载单例Bean的实例化逻辑【Spring源码分析】从源码角度去熟悉依赖注入(一)【Spring源码分析】…

2 月 7 日算法练习- 数据结构-并查集

并查集 并查集是一种图形数据结构,用于存储图中结点的连通关系。 每个结点有一个父亲,可以理解为“一只伸出去的手”,会指向另外一个点,初始时指向自己。 一个点的根节点是该点的父亲的父亲的的父亲,直到某个点的父亲…

【NodeJS】006- API模块与会话控制介绍d

1.简介 1.1 接口是什么 接口是 前后端通信的桥梁 简单理解:一个接口就是 服务中的一个路由规则 ,根据请求响应结果 接口的英文单词是 API (Application Program Interface),所以有时也称之为 API 接口 这里的接口指的是『数据接口』&#…

轮播图的五种写法(原生、vue2、vue3、react类组件,react函数组件)

轮播图效果是一种在网页或应用程序中展示多张图片或内容的方式,通常以水平或垂直的方式循环播放。本文使用原生、vue2、vue3、react类组件,react函数组件五种写法实现了简单的轮播图效果,需要更多轮播效果需要再增加样式或者动画。 淡入淡出效…

游戏服务器租用价格表_TOP3费用对比

游戏服务器租用多少钱一年?1个月游戏服务器费用多少?阿里云游戏服务器26元1个月、腾讯云游戏服务器32元,华为云26元,游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选,游戏专业服务器公网带宽10M、12M、15M…

代码随想录算法训练营29期Day44|LeetCode 518,377

文档讲解:完全背包理论基础 零钱兑换II 组合总和IV 518.零钱兑换II 题目链接:https://leetcode.cn/problems/coin-change-ii/description/ 思路: 这是一道典型的背包问题,一看到钱币数量不限,就知道这是一个完全背…

大模型训练所需的硬件配置

1. 引入 训练一个大模型,到底需要投入多少块GPU,需要多少数据,训练多长时间能达到一个不错的效果? 本文引用靠谱的数据,来回答这些问题。 2. 全流程训练 大模型的训练,简单来说,分为Pretrain…

C#,普洛尼克数(Pronic Number)的算法与源代码

1 普洛尼克数(pronic number) 普洛尼克数(pronic number),也叫矩形数、欧波朗数(oblong number),是两个连续非负整数的积,即mn*(n1)。第n个普洛尼克数侪是n个三角形数个两倍。 2 计算结果 3 源程序 using System; namespace Legalsoft.Tru…

02 数据库管理 数据表管理

文章目录 数据库管理数据表管理基础数据类型表的基本操作 数据库管理 查看已有库 show databases; 创建库 create database 库名 [character set utf8]; e.g. 创建stu数据库,编码为utf8 create database stu character set utf8; create database stu charsetutf8;…

禁止文件外发,文件禁止外发的方法

在当今的企业环境中,数据安全至关重要。 什么是企业文件外发? 企业文件外发指的是将企业内部的电子文件发送给组织外部的人员使用。 这种行为可能带来数据安全风险,因为电子文件自身具有易拷贝、易扩散、易传播的特性。 如果带有核心资产或…

LLMs之Llama2 70B:《Self-Rewarding Language Models自我奖励语言模型》翻译与解读

LLMs之Llama2 70B:《Self-Rewarding Language Models自我奖励语言模型》翻译与解读 目录 《Self-Rewarding Language Models》翻译与解读 Abstract 5 Conclusion结论 6 Limitations限制 《Self-Rewarding Language Models》翻译与解读 地址 文章地址&#xff1…