问题标签 [structured-logging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
19 浏览

python - 结构化日志中的事件是什么?

我想知道结构化日志中有哪些事件。只有事件可以触发不同的处理器吗?我曾尝试查找 python 文档,但找不到有关什么构成事件的更多信息。

0 投票
2 回答
4394 浏览

json - 是否可以在没有模板消息的情况下使用 NLog 的结构化日志记录?

直到今天,我们一直在使用 NLog 版本 4.4.12(没有结构化日志记录)。但是,我们使用https://www.nuget.org/packages/NLog.StructuredLogging.Json/进行结构化日志记录。

使用此扩展的好处是您不需要模板化消息(包含索引或占位符以供您记录其他参数/​​对象)。该消息不包含任何索引或占位符供您记录的其他对象(即匿名类型)。

切换到支持开箱即用结构化日志记录的 NLog 4.6.5,我们希望摆脱那个额外的 NuGet 包。但是,仅当使用带有实际索引/命名占位符的模板化消息时,才会记录我们的附加参数。

我们的消息中没有索引或占位符确实会导致我们的其他参数/​​对象无法通过 JSON 呈现出来。

是否有可能有非模板化的消息,但仍然使用 NLog 的结构化日志记录我们已传递给它们以添加到 JSON 中的附加参数?

下面是一个示例(请注意,我们在 nlog 周围使用了一个额外的包装器)

NLog 版本:4.6.5

平台:.Net 4.5

当前的 NLog 配置

为什么我们需要它?

  • 在没有任何替换索引或占位符的情况下保持消息不变真是太好了,这样我们就可以在日志中搜索完全相同的消息。(使用new JsonAttribute("message", "${message:raw=true}"不是一种选择)

  • 同样通过这种方式,我们最终不会在日志消息中包含 JSON 序列化对象(替换模板化消息的占位符/索引)以及这些附加参数的附加 JSON 字段。

请查看其最佳实践:https ://github.com/justeat/NLog.StructuredLogging.Json/blob/master/README.md#best-practices

如果你问:“为什么不继续使用 NuGet NLog 扩展?” 答案是,当在嵌套对象的模板化消息中使用 {@placeholder} 时,NLog 的结构化日志可以更好地呈现附加参数。

编辑 1:我想让我的匿名对象的所有属性都呈现在 json 的根目录中。如:

0 投票
0 回答
60 浏览

c# - 使用 Serilog 上下文而不依赖

我认为标题可能有点模糊,但我想不出更好的标题。

我的用例是这样的:我有一个 Web API 项目,它正在使用一些“库”项目,负责处理业务逻辑,我想使用SerilogLogContext来放置一些属性,以便我可以跟踪操作。

我遇到的问题是,在我的入口点(Web API 项目)中,我没有这些属性能够执行以下操作:

在我的“库”项目中,我拥有这些属性的值,但我觉得我的业务逻辑不一定要依赖于Serilog.Context能够添加属性。

我想说的是,Serilog理想情况下,依赖项应该在我的入口点项目中,而我的业务逻辑应该依赖于某种接口。

从这里,我知道它ILogEventEnricher存在,但首先它意味着我的业务逻辑中的依赖Serilog。此外,它需要知道它试图设置的属性,但鉴于我需要在开头和我的入口点项目中添加它,如下所示:

这意味着我回到了我原来的问题。

所以,似乎我在这里面临着一个我不知道如何解决的困境。也许我的思维过程朝着错误的方向发展,但无论如何,我将不胜感激。

0 投票
2 回答
183 浏览

logging - 在 RavenDB 中保存结构化日志

我正在编写 .NET Core 应用程序,并希望使用 .NET Core Logging Extensions 中提供的结构化日志记录以更结构化的方式编写日志。我想将我的日志保存在 RavenDB 中,我想知道这样的用例是否有最佳实践?我是 Document DB 的新手,我无法像以前在 SQL 关系数据库中那样预测未来的事情。我的主要考虑是:

  1. 我应该将每个日志保存在单独的文档中,还是更好的主意是为每个结构化日志模板创建一个文档,并在其中保存具有相同模板的日志。第二个想法很诱人,但我有点担心它会在一段时间后爆炸?
  2. 最好以一种格式(消息、异常等)保存所有日志并将结构化数据保存在附加的键值列表中,或者为每种日志类型创建单独的文档结构会更好?
0 投票
1 回答
155 浏览

asp.net - 在包装类中使用 NLog 时如何实现结构化日志记录

当 NLog 位于包装器类中时,我无法弄清楚如何使用结构化日志记录。我有一个调用我的 nlog 包装类的 asp.net webapp。

它适用于常规日志记录。logger.Info("Gets to here.")但我不能让它为结构化日志调用工作。logger.Info("This is structured logging entry @{param1}", new {Status = "processing"})

这是我的 NLog(EventLog.LogManager) 包装类:

这是我调用上述方法的 asp.net 应用程序:

如果有人能指出我正确的方向,将不胜感激。先感谢您。

0 投票
1 回答
2452 浏览

java - 通过 logback.xml 的 Logback 结构化日志记录格式时间戳

我想格式化结构化日志中的时间戳。目前我定义了logback.xml这样的:

使用<fieldNames>我可以更改时间戳字段的名称。

如何通过配置更改时间戳的模式logback.xml

0 投票
1 回答
2109 浏览

c# - 如何将参数添加到 .Net Core 结构化日志记录而不在消息中引用它?

我可以在 .net 核心中做到这一点

然后像这样的日志库NLog会知道消息中有一个clientId使用值调用的属性MyId,并且可以以特殊的方式呈现它。

我正在尝试在消息本身中不包含该属性的情况下做同样的事情,但无法确定它。这是我到目前为止所做的,它不会产生以下属性NLog

这会导致消息没有属性。有没有更好的方法来做到这一点,或者我做错了什么?

0 投票
2 回答
849 浏览

python - Google StackDriver将日志与父请求python 3相关联

在 python 2.7 中,应用引擎 sdk 在后台进行工作,将所有日志与父请求嵌套,以便在 Google StackDriver 中建立关联。

在过渡到 python 3 时,它是通过使用谷歌云日志记录或结构化日志记录,并且从我能找到的所有不同参考资料中,重要的是在堆栈驱动程序的“子”日志中具有相同的跟踪 ID与“请求”日志匹配。

正如您在下面看到的那样,它仍然显示为不同的日志。

对于上下文,我什至在应用引擎上部署的一个空的 django 项目上尝试了这个。

得到相同的结果,即使遵循文档中的示例: https ://cloud.google.com/run/docs/logging#writing_structured_logs

日志堆栈驱动程序

尝试登录到标准输出会给出相同的结果。

记录 StackDriver 2

编辑:

在初始请求之后,使用标准输出时,所有其他请求都将嵌套在初始请求下。

但是,“父”日志不采用“子”日志的最高严重性,因此过滤器不会获取实际日志。见下文:

在此处输入图像描述

0 投票
1 回答
475 浏览

c# - 如何在 C# .NET 结构化日志记录中强制使用骆驼大小写?

有谁知道如何将 .NET Core C# 中结构化日志记录的行为/格式更改为驼峰式(例如:camelCase)?我正在尝试利用结构化日志记录,如下所示:

假设某个类如下所示:

为简洁起见,我将收到如下输出:

但我想要的是所有字段都是驼峰式,就像日志中的所有父字段一样。以下是期望的结果:

我尝试使用新的 JsonSerializerSettings 对象设置我的 JsonConvert.DefaultSettings 以强制使用驼峰式大小写,但我假设这仅在我实际序列化为字符串时才有效(从 StackOverflow 问题中获得)。我猜记录器不会在引擎盖下使用。

如果对我使用有帮助,我正在使用 .NET Core 2.2 和 v4.8.1。

0 投票
1 回答
666 浏览

google-cloud-platform - 如何编写结构化日志以便 GCP 日志查看器使用消息字段?

问题

有没有办法从 Cloud Functions 写入结构化日志,以便消息字段自动显示为 GCP 日志查看器中的主要消息?

使用这个测试,我发现有时会使用一个名为message的字段。例如,给定这些日志:

GCP 日志查看器将显示如下内容:

谷歌日志控制台

注意最后的条目,它应该有一个带有字段示例的消息,而不是一个顶级消息{ "fields": { ... } }

额外细节

Cloud Run 有一个文档描述了特殊的结构化日志记录字段(即严重性和消息),Stackdriver 日志记录将自动获取并用于填充 Stackdriver 控制台中日志条目的 DEBUG/WARN/INFO/ERROR 图标和顶级消息。

消息中的特殊 JSON 字段

当您将结构化日志作为 JSON 字典提供时,一些特殊字段将从 jsonPayload 中剥离,并写入生成的 LogEntry 中的相应字段,如特殊字段文档中所述。

例如,如果您的 JSON 包含一个严重性属性,它会从 jsonPayload 中删除,并显示为日志条目的严重性。message 属性用作日志条目的主要显示文本(如果存在)。有关特殊属性的更多信息,请阅读下面的日志记录资源部分。

Cloud Functions的相应文档没有关于特殊字段的信息。