当前位置: 首页 > news >正文

Golang 结构化日志包 log/slog 详解(四):分组、上下文和属性值类型

上一篇文章讲解了 log/slog 包中的自定义日志属性字段和日志级别,本文讲解下分组、上下文和属性值类型

分组输出

slog 支持将字段放在组中并且可以给分组指定名称。如何展示分组的内容,取决于使用的 handler,例如 TextHandler 使用点号分隔组名和属性,JSONHandler 将每个组视为单独的 JSON 对象,并以组名作为键。分别看下 TextHandler 和 JSONHandler 的示例。

TextHandler:

package mainimport ("log/slog""os"
)func main() {h := slog.NewTextHandler(os.Stdout, nil)logger := slog.New(h)logger = logger.WithGroup("request")logger.Info("路多辛的博客", "method", "post", "url", "xxx.com/post")
}

输出内容如下:

time=2023-09-24T18:17:45.642+08:00 level=INFO msg=路多辛的博客 request.method=post request.url=xxx.com/post

JSONHandler:

package mainimport ("log/slog""os"
)func main() {h := slog.NewJSONHandler(os.Stdout, nil)logger := slog.New(h)logger = logger.WithGroup("request")logger.Info("路多辛的博客", "method", "post", "url", "xxx.com/post")
}

输出内容如下:

{"time":"2023-09-24T18:19:39.025697+08:00","level":"INFO","msg":"路多辛的博客","request":{"method":"post","url":"xxx.com/post"}}

上下文(contexts)支持

一些 handler 或者自定义的 handlers 可能希望得到包含上下文(context.Context)的信息,例如链路追踪的场景,需要从上下文中获取到当前的 span 信息。slog 包提供了对这种场景的支持,Logger.log 和 Logger.LogAttrs 方法将 context.Context 类型的参数作为第一个参数,还有记录几种级别日志的方法,都同时提供了带上下文的方法,对应的方法就是后面跟上 Context。简单示例如下:

package mainimport ("context""log/slog"
)func main() {slog.InfoContext(context.Background(), "路多辛的博客")
}

属性和值

属性是一个键值对,日志输出方法接受交替出现的属性和值,例如:

package mainimport ("log/slog"
)func main() {slog.Info("路多辛的博客", "count", 3)
}

也可写为如下形式:

package mainimport ("log/slog"
)func main() {slog.Info("路多辛的博客", slog.Int("count", 3))
}

这里的 slog.Int 返回一个 slog.Attr 类型的值,slog.Attr 用来表示一个键值对。 slog 还提供了生成其他类型的键值对的函数,例如 float、string 和 Bool 等,属性的值是 slog.Value 类型,像 any 一样,Value 可以保存任何值。要获得最高效的日志输出,可以使用 Logger.LogAttrs,只接受 slog.Attr 类型的日志内容,不接受键值交替出现的值。例如:

package mainimport ("context""log/slog""os"
)func main() {h := slog.NewTextHandler(os.Stdout, nil)logger := slog.New(h)logger = logger.WithGroup("request")logger.LogAttrs(context.Background(), slog.LevelInfo, "路多辛的博客", slog.Int("count", 3))
}

输出效果和如下的代码是一样的:

package mainimport ("log/slog"
)func main() {slog.Info("路多辛的博客", "count", 3)
}

相关文章:

Golang 结构化日志包 log/slog 详解(四):分组、上下文和属性值类型

上一篇文章讲解了 log/slog 包中的自定义日志属性字段和日志级别,本文讲解下分组、上下文和属性值类型 分组输出 slog 支持将字段放在组中并且可以给分组指定名称。如何展示分组的内容,取决于使用的 handler,例如 TextHandler 使用点号分隔…...

小白学Python:提取Word中的所有图片,只需要1行代码

#python# 大家好,这里是程序员晚枫,全网同名。 最近在小破站账号:Python自动化办公社区更新一套课程:给小白的《50讲Python自动化办公》 在课程群里,看到学员自己开发了一个功能:从word里提取图片。这个…...

pip修改位于用户目录下的缓存目录

默认 pip 缓存目录: Windows: C:\Users\${用户名}\AppData\Local\pip\cache Linux: ~/.cache/pip 一、修改方式 1.命令方式 pip config set global.cache-dir "D:\kwok\data\pip-cache" 2.配置文件方式 ① Windows: C:\Users\${用…...

更新、修改

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法: update 表名 列名该列新值, 列名该列新值, ... where 记录匹配条件; 说明:update 更新、修改 set 设置 …...

山西电力市场日前价格预测【2023-09-25】

日前价格预测 预测说明: 如上图所示,预测明日(2023-09-25)山西电力市场全天平均日前电价为442.30元/MWh。其中,最高日前电价为720.46元/MWh,预计出现在19: 00。最低日前电价为276.06元/MWh,预计…...

从collections库的Counter类看items()方法和enumerate()方法

下面的代码是针对文件的词频统计,使用了collections库及其Counter类 import collections def count_word_frequency(text): words text.lower().split() word_counts collections.Counter(words) return word_counts def count_fileword_frequency(fi…...

2023-09-24 LeetCode每日一题(LRU 缓存)

2023-09-24每日一题 一、题目编号 146. LRU 缓存二、题目链接 点击跳转到题目位置 三、题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存i…...

《计算机视觉中的多视图几何》笔记(10)

10 3D Reconstruction of Cameras and Structure 本章主要描述了如何利用2张图片来恢复相机的参数以及物体在三维空间中的形状。 文章目录 10 3D Reconstruction of Cameras and Structure10.1 Outline of reconstruction method10.2 Reconstruction ambiguity10.3 The proje…...

【一、虚拟机vmware安装】

安装虚拟机 下载 官方下载地址:https://www.vmware.com/cn.html 大概流程就是,最重要的事最后一步...

uniapp 离线打包 plus.runtime.install 安装页面不弹起

uniapp 离线打包 plus.runtime.install 安装页面不弹起 updateVersion(webview : any, eventTitle : string, eventContent : string) {const loading plus.nativeUI.showWaiting(准备下载);var dtask plus.downloader.createDownload(eventContent,{method: GET,timeout: 5…...

Docker 自动化部署(保姆级教程)

Docker 自动化部署 1. jenkins 介绍1.1 参考链接:1.2 jenkins 概述1.3 jenkins部署项目的流程 2. jenkins 安装2.1 基于docker 镜像2.2 启动 jenkins 后端服务2.3 登录 jenkins 服务后端 3. jenkins自动化部署开始3.1 下载需要的插件3.2 创建任务3.2.1 描述3.2.2 配…...

北工大汇编题——分支程序设计

题目要求 信息检素程序设计:在数据区,有9个不同的信息,编号 0-8,每个信息包括20 个字符。从键盘接收 0-8 之间的一个编号,然后再屏幕上显示出相应编号的信息内容,按“q”键退出 完整代码 DATAS SEGMENTn0…...

贴片电容耐压值选取和特性(包含实际电路和PCB)

一、一般电容的特性 ①容值大的电容,一般通低频率;  ②容值小的电容,一般通高频率。   注:详细请看这位博主的篇文章: 大电容为什么虑低频小电容为什么又虑高频?(个人整理) 二、贴片电容的耐压选取 ①贴片电容有2…...

【云原生】kubernetes中pod(进阶)

目录 一、资源限制 业务cpu 内存 1.1CPU 资源单位 1.2 内存 资源单位 示例1 示例2: 二、健康检查:又称为探针(Probe) 2.1探针的三种规则 2.2 Probe支持三种检查方法 2.3示例 示例1:exec方式 示例3&#xf…...

Cesium 问题:获取高度值,高度值又是相对于谁来说的

文章目录 问题分析 问题 今天在开发中,甲方提出一个这样的问题,你的高度是怎么算出来的,对此,我只知道使用并不知道怎么来的,因此特意查了一番资料,希望帮助到大家 分析 在 Cesium 中,我们可以使…...

第三、四、五场面试

第三场 共享屏幕做题(三道简单题) 替换空格成%20(双指针) 删除升序链表中的重复元素(指针)有效的括号(栈) 第四场、第五场 自我介绍 项目拷打 整个项目架构rpc模块的情况分析的数…...

力扣-290.单词规律

Idea 先建立一个hashmap,记录s串中的每个单词以及对应的下标再建立一个hashmap,记录pattern串中相同字母以及对应的下标遍历pattern串时,遇到不同字母存到pat表中,同时将下标对应的s中的单词存入到查重test集中,因为如…...

常见限流算法学习

文章目录 常见限流算法学习前言限流算法基本介绍固定窗口计数器限流算法计数器限流算法相关介绍计数器限流算法的实现(基于共享变量)计数器限流算法的实现(基于Redis) 滑动窗口计数器算法滑动时间窗口算法相关介绍介绍滑动时间窗口…...

JS面试相关

深拷贝、浅拷贝、递归、优化 扁平化 柯里化 this指向原型 继承 call、apply、bind js取整的方法,parseInt第二个参数是什么 forEach和map有什么区别,使用场景? 内存泄漏的场景 原型链原型 严格模式 Js中for in 和for of的区别 slice、splice、…...

SSRF漏洞

Server-Side Request Forgery:服务器端请求伪造 目标:网站的内部系统 形成的原因 攻击者构造形成由服务器端发起请求的译者安全漏洞。 由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内…...

Qt5开发及实例V2.0-第十八章-Qt-MyselfQQ实例

Qt5开发及实例V2.0-第十八章-Qt-MyselfQQ实例 第18章-Qt MyselfQQ18.1 概述18.2 、发送文件18.3 、接收文件18.4 、保证传输的安全和稳定18.5 、总结 本章相关例程源码下载1.Qt5开发及实例_CH1801.rar 下载 第18章-Qt MyselfQQ 18.1 概述 MyselfQQ是一个基于Qt5框架开发的轻量…...

当下IT测试技术员的求职困境

从去年被裁到现在,自由职业的我已经有一年没有按部就班打卡上班了。期间也面试了一些岗位,有首轮就挂的,也有顺利到谈薪阶段最后拿了offer的,不过最后选择了拒绝。 基于自己近一年的面试求职经历,我想聊聊当下大家在求…...

MR混合现实情景实训教学

MR混合现实技术是一种将虚拟现实与现实场景相融合的创新技术,可以广泛应用于各个领域。其中,混合现实情景实训教学是MR技术的一个重要应用场景。 在医学专业方面,医学生常常需要通过实际操作来提升自己的技能水平,然而传统的实训方…...

嵌入式C++总结

1、new delete与malloc free区别 new delete是运算符,malloc free是函数。 前者不需要传入大小,后者需要。 前者会调用构造、析构函数,后者不会。 前者不需要强制转换,后者需要。 2、智能指针 智能指针是避免忘记释放动态申请对象…...

C语言之内存函数篇(3)

目录 memcpy memcpy的使用 memcpy的模拟实现 NO1. NO2. memcpy可否实现重叠空间的拷贝 my_memcpy memcpy memmove memmove memmove 分析 代码 memset memset的使用 memcmp memcmp的使用 <0 0 >0 今天我们继续介绍几个重要的内存操作函数。&…...

java面试题-学成在线项目

1、详细说说你的项目吧 从以下几个方面进行项目介绍&#xff1a; 1、项目的背景&#xff0c;包括&#xff1a;是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。 2、项目的业务流程 3、项目的功能模块 4、项目的技术架构 5、个人工作职责 6、个人负责模块的详细说…...

ViewBinding——Android之视图绑定

高版本的gradle不再支持 kotlin-android-extensions插件&#xff0c;因此view的绑定方式也有所改变。 1.启用视图绑定 android {...viewBinding {enabled true}} 如果想在生成绑定类时忽略某个布局文件&#xff0c;请将 tools:viewBindingIgnore"true" 属性添加到…...

vue学习-04vue的props配置项和mixin混入

今天仍然就是敲vue的一个demo&#xff0c;vue的props配置项和mixin混入 props配置项 Vue.js 中的 props 是用于在父组件向子组件传递数据的配置项。通过 props&#xff0c;你可以将父组件中的数据传递给子组件&#xff0c;并在子组件中使用这些数据。以下是关于 props 配置项…...

九、多项式朴素贝叶斯算法(Multinomial NB,Multinomial Naive Bayes)(有监督学习)

Multinomial Naive Bayes&#xff1a;用于多项式模型的Naive Bayes分类器 一、算法思路 多项式Naive Bayes分类器适用于离散特征分类&#xff08;如文本分类中的字数&#xff09; 多叉分布通常需要整数特征计数 不过&#xff0c;在实际应用中&#xff0c;分数计数&#xff08…...

数据结构上机练习——单链表的基本操作、头文件、类定义、main函数、多种链表算法的实现,含注释

文章目录 单链表的基本操作实现1.头文件2.类定义和多种算法的实现2.1创建空表2.2头插法创建n个元素的线性链表2.3一个带头节点的链表存放一组整数&#xff0c;设计一个算法删除值等于x的所有节点。2.4计算线性表中值为偶数的节点个数2.5一个带头节点的单链表heada存放一组整数&…...

宁波电器网站制作/新闻稿撰写

mybatis3中增加了使用注解来配置Mapper的新特性&#xff0c;本篇文章主要介绍其中几个Provider的使用方式&#xff0c;他们是&#xff1a;SelectProvider、UpdateProvider、InsertProvider和DeleteProvider。MyBatis 3 User Guide中的最后一章描述了注解的简单用法&#xff0c;…...

网站上写个招贤纳士怎么做/seo技术公司

在3.2以前,我们要拿到UITouch跟使用者互动,大部分都是透过UIResponder的四种methods - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesEnded:(NSSet *)touches withE…...

动态图片制作/seo是什么职务

上游LSR和下游LSR是针对什么来说的&#xff1f;针对特定的FEC来说。标签从下游向上游分发数据从上游向下游转发...

什么查网站是否降权/矿产网站建设价格

从写第一篇今日头条高仿系列开始&#xff0c;到现在已经过去了1个多月了&#xff0c;其实大体都做好了&#xff0c;就是迟迟没有放出来&#xff0c;因为我觉得&#xff0c;做这个东西也是有个过程的&#xff0c;我想把这个模仿中一步一步学习的过程&#xff0c;按照自己的思路写…...

cosy主题wordpress/最新疫情最新情况

TortoiseGitGitGitee安装没什么可说&#xff0c;只需要不断next就行&#xff0c;介绍注意点。 安装完后的选择 安装完后开始里点开这个软件生成公钥和私钥 点击生成 将私钥保存到一个文件夹&#xff0c;公钥复制准备在码云用&#xff0c;私钥后面也会用。 准备使用公钥…...

海外网站建设/百度导航如何设置公司地址

上一篇文章中讲解了UE4中对类&#xff08;UCLASS&#xff09;的反射支持&#xff0c;这篇文章我们还是以实例的形式来讲解虚幻4对结构体&#xff08;USTRUCT&#xff09;以及枚举&#xff08;UENUM&#xff09;的支持。 结构体 首先让我们看一下测试结构体反射支持的代码&#…...