问题内容
我正在使用 slog 包。我面临的问题是,当我在结构中拥有大部分参数时,我必须向其传递太多参数。
有没有办法修改处理程序以使用这个结构? 就像你可以在 python 中执行的操作一样,发送一个字典或对象作为额外的内容,然后从中提取所需的参数。
现在我有这个:
g.l.Log(
context.TODO(),
slog.LevelInfo,
"Sending request to server.",
"Destination", m.route.destination,
"Protocol", m.route.protocol,
"Service Identifier", m.route.serID,
"Session ID", m.GetIdentifier(),
"Client Connection", client.RemoteAddr().String(),
"Server Connection", destination.RemoteAddr().String(),
)
我想做这样的事情:
g.l.Log(
context.TODO(),
slog.LevelInfo,
"Sending request to server.",
"message", m,
"Client Connection", client.RemoteAddr().String(),
"Server Connection", destination.RemoteAddr().String(),
)
我应该怎么做?
正确答案
我找到了这个问题的答案。
我将 slog 记录器嵌入到我的自定义记录器中。
type Logger struct {
*slog.Logger
}
我还为我的结构编写导出函数,如下所示:
func (m *GatewayMessage) LoggableData() *xlog.RequestData {
return &xlog.RequestData{
Request: m.Request.String(),
OriginalRequest: m.OriginalRequest,
}
}
func (m *GatewayMessage) PopulateGeneralLogData() []any {
logData := m.LoggableData()
return []any{
"Request", logData.Request,
"OriginalRequest", logData.OriginalRequest,
}
}
然后我编写一个辅助函数,获取此 GatewayMessage 作为参数以及任意数量的参数,例如 slog Logger 的 Log 函数。 这是调试功能的例子:
func LogDebug(l *xlog.Logger, ctx context.Context, msg string, m *GatewayMessage, args ...any) {
var generalLogData []any = make([]any, 0)
if m != nil {
generalLogData = m.PopulateGeneralLogData()
}
args = append(args, generalLogData...)
l.RuntimeDebug(
ctx,
msg,
args...,
)
}
我还使用名为 RuntimeDebug
的接收器在所有日志中注入名为 Scope 的参数。
func (l *Logger) RuntimeDebug(ctx context.Context, msg string, args ...any) {
args = append(args, "Scope", "Runtime")
l.Logger.Log(
ctx,
slog.LevelDebug,
msg,
args...,
)
}
以上就是如何在 slog 记录器中传递结构并自动使用其字段?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容猜你喜欢
AI推送时光机如何在 slog 记录器中传递结构并自动使用其字段?
后端开发2024-02-06
咦!没有更多了?去看看其它编程学习网 内容吧