问题标签 [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.
java - 以漂亮的文本格式化结构化日志(单行序列化 JSON)的“gcloud app logs tail”输出
我正在尝试使用 JUL 和控制台处理程序简单地进行结构化日志记录。正如谷歌的官方文档https://cloud.google.com/run/docs/logging#using-json中提到的,我正在使用带有严重性和消息JSON 键的单行序列化 JSON来使日志记录结构化并按预期工作。作为日志查看器,我可以按严重性过滤日志。
但是,当我使用gcloud app logs tail流式传输日志时,我得到了这种奇怪格式的输出。
我如何将这些 json 格式设置为一串漂亮的文本
json - Log4j2 JsonTemplateLayout - 更改时区
log4j2 配置的 JsonTemplateLayout 正在按照“EventTemplateUri”打印时间戳。
log4j2.yml 片段:
日志打印:
根据 EcsLayout.json 定义,时间戳打印“UTC”时区。如何更改 JsonTemplateLayout 中 @timestamp 属性的时区?
或者如何覆盖 JsonTemplateLayout 中 json 模板中定义的属性?
logging - 使用 Loki 进行结构化日志记录
是否可以使用 Loki 进行结构化日志记录?
如果是,那么执行此操作的最佳做法应该是什么?
目前我在 Loki 中以纯文本或非结构化日志的形式发送我的日志。
任何帮助,将不胜感激
json - 是否有人类可读的结构化日志记录格式?
我希望我的程序向它的 stderr 写入一个同时是人类和机器可读的日志。
要求:
- 日志是消息流。即我不能只写一个大的 xml 或 json 文档。每条消息都必须可以单独解析,而不需要增量解析器或生成器。
- 就本问题而言,tty 检测和日志格式选择开关被视为作弊。我希望相同的精确输出同时是人类和机器可读的。
- 由于与 2 相同的原因,没有后处理
- 没有临时格式。我不希望消费者必须编写解析器。连一点小事都没有。
- 没有太晦涩的格式。必须有一个库来解析前 10 种最流行的通用编程语言中的这种格式,并且该库必须能够将整个日志解析为开箱即用的消息流,而无需消费者处理数据。
Pretty JSON 失败 5 - 大多数 JSON 解析 API 无法解析多个连接的 JSON 文档。
JSON Lines不是人类可读的,尤其是当它包含嵌套数据时,因为整个日志条目最终都在一行上。
看来application/json-seq (RFC 7464)确实允许 JSON 文本打印得很漂亮(人类可读),同时只需要在常规 JSON 解码器之上进行非常简单的解析。这是迄今为止最接近的一个。
验尸
我最终重新考虑了我的方法:记录jsonlines - 最容易生成和使用,使用外部漂亮打印机进行后处理,例如jq .
供人类使用。
.net-core - 如何在 AWS Cloudwatch 上的 Serilog 的结构化日志输出中显示带有替换参数的日志消息
我正在使用 AWS Cloudwatch 进行应用程序日志记录。我最近了解到我可以使用结构化日志记录来使我的日志更易于搜索。我做了一些研究,并决定使用 Serilog 作为我的日志记录工具。
我遇到的一个困难是,虽然我在 Cloudwatch 中看到了结构化的日志消息,但它没有显示完全格式化的日志消息。
例如,当我将其发送到日志时:
我在 Cloudwatch 日志输出中看到此消息
你好 {person},{question} 你是 {time} 吗?
但是我在任何地方都看不到字符串的完全替换版本,即
你好,戴夫,你今天好吗?
我按照此演练在 AWS https://martinjt.me/2020/02/16/serilog-and-cloudwatch-with-inbuilt-credentials/中设置 Serilog 以进行结构化日志记录,并最终得到此代码。
这是 Cloudwatch 中的完整条目
我们自己构建消息所需的所有信息都在那里,但日志的可读性不如我能看到替换的字符串。我有什么遗漏或做错了吗?也许它只是 Cloudwatch 中的一个配置,用于显示带有替换的字符串?如果在那里完成会更好,我想减少日志大小。
感谢大家的帮助。
elasticsearch - 如何在 Elasticsearch 中处理来自不同日志源的字段冲突?
我们通过 Filebeat 将 Kubernetes 集群中运行的各种服务的日志发送到 Elasticsearch。其中一些服务是我们自己开发的,另一些是第三方的。我们在索引中使用动态映射。我们遇到了一个问题,有时来自一个服务的日志使用的字段恰好与来自不同服务的日志共享相同的名称,并且该字段中的数据类型不同。例如,在一个服务的日志中,该url
字段可能是一个字符串,但在另一个服务中,它可能是一个结构化对象。然后我们在摄取日志时遇到错误,说:
我们可以使用什么策略来避免这些冲突?
elasticsearch - ElasticSearch中如何处理不同类型的结构化数据
我有两个应用程序,第一个记录格式的消息:
而第二个:
Elastic 会丢弃此类日志,因为它无法确定“属性”字段的映射(有时是字符串,有时是嵌套对象)。
即使我决定将所有嵌套的 json 写为字符串,问题仍然存在:
并从另一个应用程序:
在这里进行结构化日志记录的正确方法是什么?我必须检查和管理每个可能参数的类型?
c# - 是否可以在 C# 中将结构化日志记录与字符串插值结合起来?
我想这样做:
到目前为止,似乎不可能将结构化日志记录的语法与插值字符串结合起来。也许我在这里遗漏了一些东西并且有语法吗?
PS我想插入第一个参数,但后者用于结构化日志记录。
json - 在 NLog 流利的日志记录中,如何强制将日志属性呈现为 JSON?
我正在使用 NLog 在 Seq 服务器中创建语义日志。我想记录一个对象,该对象具有一种ToString()
生成数据内容的简短人类可读摘要的方法。因此,我想在使用消息模板对其进行格式化时将对象呈现为字符串。我还想将该对象作为日志属性包含在内,并将其所有属性呈现为 JSON,以便我可以在 Seq.xml 中检查这些数据。所以基本上我想用两种不同的方式记录同一个对象。
这是我尝试在代码中执行此操作的方式:
第一部分工作正常。问题出在.Property()
零件上。这也调用.ToString()
对象并将其呈现为字符串。我想要一个 JSON 文档。
如果我使用它作为我的消息模板,我可以获得这种效果:
这会将对象作为 JSON 呈现到日志属性中,但不幸的是,也会将 JSON 注入格式化的日志消息中,这会导致消息非常不可读。使用时如何获得这种行为.Property()
?
kotlin-coroutines - 高阶内联函数和 MDCContext
所以我正在尝试编写一个高阶函数,将映射诊断上下文(MDC)添加到作为参数传递的闭包中。
有两种方法可以使它工作。一个用于非暂停功能(MDC.put
),一个用于暂停功能(MDCContext
)......但是有没有办法让它在任何类型的功能中工作?
inline
我知道除了使用修饰符之外没有“暂停方差” ,但是......
只是好奇!