问题标签 [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 回答
2502 浏览

c# - Serilog 日志异常和其他属性

我正在 WCF 服务应用程序中实现 Serilog。在我的 Global.asax 中,我试图设置全局记录器以打印日志的时间、线程 ID、可能记录的任何异常以及事件中包含的 json 格式的其他属性。

我的日志设置:

当我查看为片段中的信息事件创建的日志时,它看起来像这样

当我尝试记录异常时:

我在日志中看到了这一点:

我期待看到日志项中包含的异常消息和堆栈跟踪。

在另一个位置,我正在尝试记录请求过程的成功:

我看到了:

显然我设置不正确或没有正确记录事情。

具体问题

  • 问题 1:我的配置中是否有任何内容与我想要的输出冲突?
  • 问题 2:Serilog 是否会自动包含属性的大括号,即使它们不包含在日志事件中?(日志后的空 {})
  • 问题 3:当我提供属性时,为什么它们被包含在插值字段中,而不是在日志的属性部分?
  • 问题 4:我是否需要进一步配置以包含异常的详细信息?
0 投票
1 回答
216 浏览

c# - 具有重复孔名的 NLog 结构化日志记录

我试图弄清楚根据在 NLog 中实现的消息模板语法捕获具有重复孔名称的属性的正确行为是什么。

让我们看一个例子。

  1. 使用重复的孔名称记录到控制台,但参数的数量少于名称的数量。

    /li>

输出是

2020-05-26 09:47:37.5013|INFO|A|来自 {a} {b} {a} 的你好

没有任何替代品!

  1. 使用相同数量的参数记录到具有重复孔名称的控制台。

    /li>

输出是

2020-05-26 09:49:53.1436|INFO|A|你好,来自 1 2 3

换人适用。

所以,我预计在第一种情况下会看到替换,但没有。NLog 中关于消息模板语法的行为是否正确?

我已经检查了 Serilog 在第一种情况下的行为。它做替换。

0 投票
1 回答
240 浏览

logging - 从 ILogEventPropertyFactory 获取原始属性值类型

我正在编写最简单的丰富器:找到所有XProperty具有枚举值类型的属性并添加另一个名为的属性XPropertyString,它是枚举值的字符串表示形式。

我从这样的事情开始:

似乎属性值是“包装的”Serilog 的类型Serilog.Events.ScalarValueSerilog.Events.SequenceValue

有什么方法可以获取上面示例中的基础属性值类型?

0 投票
0 回答
310 浏览

scala - 如何使用 slf4j 和 logback 在 scala 中导入 StructuredArgument 以进行结构化日志记录

这可能是一个愚蠢的问题,但我的 scala 知识有点缺乏。我正在尝试在 scala 中实现结构化日志记录,我们正在使用 slf4j/logback/logstash。我遇到了以下帖子:SLF4J 如何支持结构化日志记录其中描述了如何做到这一点:

显然这是java代码,而不是scala。我已经把它转换了,但我找不到 net.logstash.logback.argument.StructuredArguments.KeyValue。我猜这是因为它没有包含在构建中,但这是我绊倒的地方。

我正在使用 sbt,并且包含了我期望的包:

但是 sbt 找不到那个包(版本是 1.2.1)。让我感到困惑的是,我们对 logback 的其他依赖项是从组 id 中提取的:ch.qos.logback。我真的不明白 ch.qos.logback 是什么以及为什么它与 net.logstash.logback 不同。

长话短说,我需要用 sbt 导入什么包,以便我可以使用 StructuredArguments/KeyValues 进行日志记录?

0 投票
1 回答
543 浏览

c# - 使用 Azure Log Analytics 在 Azure Function v3 中进行结构化日志记录

我正在尝试通过像这样登录我的 Azure 函数来使用结构化日志记录:

我的 Azure 函数通过诊断设置插入到 Log Analytics 工作区。

有没有办法从 Message 中提取 customerId、objectId 和 errorMessage ?

例如,我想创建一个仪表板,显示每个 customerId 的错误数。

我试图“提取字段”功能无济于事。我需要使用 Application Insights 和自定义维度吗?

0 投票
1 回答
279 浏览

json - NLog 数据库参数 + .NET Core:JSON 中的所有事件属性?

我正在使用数据库目标并试图找出一种以all-event-propertiesJSON 格式作为参数发送的方法;我看到该参数包含“格式”的属性,但是当我这样做时,format="json"它不会产生预期的效果。

这是我的 nlog.config 文件中的内容:

不幸的是,我的属性仍在以格式记录

我期待看到的是

请指教。谢谢!

0 投票
1 回答
430 浏览

log4j2 - Log4j2(和 SLF4j 2.0.0-alpha1)和 JsonTemplateLayout——如何将消息序列化为 JSON

我正在探索 Log4j 2.14.0 和 SLF4j 2.0 并尝试生成结构化消息。

我已经用稍微修改的 LogstashJsonEventLayoutV1.json 设置了我的 Appender,

我删除了时间戳和主机名(我将其作为单元测试的一部分)并修改了“消息”的配置,如下所示:

当我记录一些东西时

它显然在生成 JSONified 日志消息:

在生产中,我的商店通常通过 SLF4J 使用 Log4J。我愿意使用 SLF4J 的 2.0.0-alpha1 版本来实现这个目标。我将如何通过 SLF4J 的 fluent API 通过 addKeyValue 实现相同的目标?

0 投票
0 回答
206 浏览

c# - ElasticSearch 的动态索引映射因字段名称不佳而丢弃日志

我有一个一直在使用 nlog 的半大型项目,并且在整个过程中,我为不同的数据类型重新使用了很多字段名称。我开始将我的日志(包括所有日志属性/字段)发送到 ElasticSearch,现在它开始困扰我。我注意到如果 ElasticSearch 无法将字段转换为它的数据类型,它只会完全删除日志。动态索引映射根据首先看到的内容来决定数据类型。

无论如何我可以告诉索引使用像字符串这样的默认数据类型吗?

附言; 该实例是云托管的,我通过 Kibana 访问它,我不知道在哪里可以找到一个日志,告诉我它是否/何时丢弃日志以解析错误。

编辑

索引映射

不幸的是,我不知道将日志推送到弹性的 api,但这里有一些示例说明它们的外观。这些不是最好的例子,但它们显示了字段名称的重叠/重用。

示例 1:

示例 2:

示例 3:

0 投票
1 回答
222 浏览

c# - 如何使用 NLog 和结构化日志有条件地呈现属性?

我继承了一个使用 NLog 进行日志记录的 ASP.NET 应用程序。记录的属性之一是命名模块,它被硬编码为“核心”。这根本没有用,因为应用程序的所有部分(例如健康检查、各种业务上下文)都推送相同的值。

在某些情况下,我尝试使用结构化日志记录来覆盖此值(我现在无法重构整个日志记录)。

扩展方法

用法

NLog 布局(为简洁起见,删除了大部分属性)

我得到想要的,那就是所有现有的调用都不会提供模块,它们会像以前一样工作。任何通过的日志LogInfoWithModule都将覆盖默认值。

但是,我发现这个解决方案非常混乱,因为:

  • 实际消息包含模块名称
  • 无法使用结构化日志记录
  • 不能延迟字符串格式化(通过向 Log 函数提供参数)

我已经尝试过这里(和这里)建议的解决方案,但${mdlc:item=module}不包含任何内容。

0 投票
2 回答
123 浏览

logging - Azure Functions 中的结构化日志记录

我试图让结构化日志记录在 Azure 函数中工作,但它在我这边不起作用。

我写了一个这样的简单应用程序

输出如下所示:

我不知道为什么解构对动态类型起作用,但对定义的类不起作用。我发现了许多没有破坏对象结构的正常日志记录示例,但我认为它应该开箱即用。

我错过了什么吗?