问题标签 [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.
python - 结构化日志中的事件是什么?
我想知道结构化日志中有哪些事件。只有事件可以触发不同的处理器吗?我曾尝试查找 python 文档,但找不到有关什么构成事件的更多信息。
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 的根目录中。如:
c# - 使用 Serilog 上下文而不依赖
我认为标题可能有点模糊,但我想不出更好的标题。
我的用例是这样的:我有一个 Web API 项目,它正在使用一些“库”项目,负责处理业务逻辑,我想使用Serilog
它LogContext
来放置一些属性,以便我可以跟踪操作。
我遇到的问题是,在我的入口点(Web API 项目)中,我没有这些属性能够执行以下操作:
在我的“库”项目中,我拥有这些属性的值,但我觉得我的业务逻辑不一定要依赖于Serilog.Context
能够添加属性。
我想说的是,Serilog
理想情况下,依赖项应该在我的入口点项目中,而我的业务逻辑应该依赖于某种接口。
从这里,我知道它ILogEventEnricher
存在,但首先它意味着我的业务逻辑中的依赖Serilog
。此外,它需要知道它试图设置的属性,但鉴于我需要在开头和我的入口点项目中添加它,如下所示:
这意味着我回到了我原来的问题。
所以,似乎我在这里面临着一个我不知道如何解决的困境。也许我的思维过程朝着错误的方向发展,但无论如何,我将不胜感激。
logging - 在 RavenDB 中保存结构化日志
我正在编写 .NET Core 应用程序,并希望使用 .NET Core Logging Extensions 中提供的结构化日志记录以更结构化的方式编写日志。我想将我的日志保存在 RavenDB 中,我想知道这样的用例是否有最佳实践?我是 Document DB 的新手,我无法像以前在 SQL 关系数据库中那样预测未来的事情。我的主要考虑是:
- 我应该将每个日志保存在单独的文档中,还是更好的主意是为每个结构化日志模板创建一个文档,并在其中保存具有相同模板的日志。第二个想法很诱人,但我有点担心它会在一段时间后爆炸?
- 最好以一种格式(消息、异常等)保存所有日志并将结构化数据保存在附加的键值列表中,或者为每种日志类型创建单独的文档结构会更好?
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 应用程序:
如果有人能指出我正确的方向,将不胜感激。先感谢您。
java - 通过 logback.xml 的 Logback 结构化日志记录格式时间戳
我想格式化结构化日志中的时间戳。目前我定义了logback.xml
这样的:
使用<fieldNames>
我可以更改时间戳字段的名称。
如何通过配置更改时间戳的模式logback.xml
?
c# - 如何将参数添加到 .Net Core 结构化日志记录而不在消息中引用它?
我可以在 .net 核心中做到这一点
然后像这样的日志库NLog
会知道消息中有一个clientId
使用值调用的属性MyId
,并且可以以特殊的方式呈现它。
我正在尝试在消息本身中不包含该属性的情况下做同样的事情,但无法确定它。这是我到目前为止所做的,它不会产生以下属性NLog
:
这会导致消息没有属性。有没有更好的方法来做到这一点,或者我做错了什么?
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
尝试登录到标准输出会给出相同的结果。
编辑:
在初始请求之后,使用标准输出时,所有其他请求都将嵌套在初始请求下。
但是,“父”日志不采用“子”日志的最高严重性,因此过滤器不会获取实际日志。见下文:
c# - 如何在 C# .NET 结构化日志记录中强制使用骆驼大小写?
有谁知道如何将 .NET Core C# 中结构化日志记录的行为/格式更改为驼峰式(例如:camelCase)?我正在尝试利用结构化日志记录,如下所示:
假设某个类如下所示:
为简洁起见,我将收到如下输出:
但我想要的是所有字段都是驼峰式,就像日志中的所有父字段一样。以下是期望的结果:
我尝试使用新的 JsonSerializerSettings 对象设置我的 JsonConvert.DefaultSettings 以强制使用驼峰式大小写,但我假设这仅在我实际序列化为字符串时才有效(从 StackOverflow 问题中获得)。我猜记录器不会在引擎盖下使用。
如果对我使用有帮助,我正在使用 .NET Core 2.2 和 v4.8.1。
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的相应文档没有关于特殊字段的信息。