首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serilog,ExceptionDetails和outputTemplate

Serilog,ExceptionDetails和outputTemplate
EN

Stack Overflow用户
提问于 2020-04-10 12:08:48
回答 2查看 2.6K关注 0票数 0

我正在使用.Net Core3.1和Serilog,但是我在日志输出方面有一个很小但很烦人的问题。

配置

我的appsettings.json

代码语言:javascript
复制
{
  "Serilog": {
    "Properties": {
      "Application": "Testing GZip"
    },
    "WriteTo": [
      {
        "Name": "Debug",
        "Args": {
          "outputTemplate": "[{Timestamp:o}] [{Level,3:u}] [{MachineName}/{ProcessName}:{ProcessId}/{ThreadName}:{ThreadId}] [{Application}/{SourceContext}] {Message}{NewLine}{Exception}{Properties:j}"
        }
      }
    ],
    "Enrich": [ "WithMachineName", "WithProcessName", "WithProcessId", "WithThreadName", "WithThreadId", "WithExceptionDetails" ]
  }
}

问题所在

如您所见,我的outputTemplate{NewLine}{Exception}{Properties:j}结尾,如果您想记录异常和异常详细信息,这是强制性的。

不幸的是,我注意到输出的格式不是很好.看看这里:

代码语言:javascript
复制
[2020-04-10T13:58:16.5592267+02:00] [INFORMATION] [PRO4-AEG/Test_Serilog_Logging:8096/:1] [Testing GZip/object] Start logging
{}[2020-04-10T13:58:16.6547724+02:00] [INFORMATION] [PRO4-AEG/Test_Serilog_Logging:8096/:1] [Testing GZip/object] Test1
{}Exception thrown: 'System.ArgumentNullException' in Test_Serilog_Logging.dll
{}[2020-04-10T13:58:16.6755158+02:00] [ERROR] [PRO4-AEG/Test_Serilog_Logging:8096/:1] [Testing GZip/object] You wrote 'THIS IS A TEST!' - Test_Serilog_Logging.TestClass
System.ArgumentNullException: Value cannot be null. (Parameter 'argument')
   at Test_Serilog_Logging.TestClass.TestLogging() in C:\Users\attil\source\repos\Test_Serilog_Logging\Test_Serilog_Logging\TestClass.cs:line 25
{"ExceptionDetail":{"Type":"System.ArgumentNullException","HResult":-2147467261,"Message":"Value cannot be null. (Parameter 'argument')","Source":"Test_Serilog_Logging","ParamName":"argument"}}[2020-04-10T13:58:16.7337262+02:00] [INFORMATION] [PRO4-AEG/Test_Serilog_Logging:8096/:1] [Testing GZip/object] Stop logging
{}The program '[8096] Test_Serilog_Logging.exe' has exited with code 0 (0x0).

正如您在第一个日志事件之后所看到的那样,Serilog开始在该行的前面加上两个字符{},如果我从配置文件中删除{Properties:j},这个字符就会消失。

有什么办法解决这个问题吗?

谢谢。阿蒂里奥

EN

回答 2

Stack Overflow用户

发布于 2020-04-15 21:35:01

每行开头的{}是JSON (一个空对象)的Properties内容,因为您没有为这些日志消息定义属性。它出现在下一行的开头,因为您是如何定义输出模板的:

代码语言:javascript
复制
{Message}{NewLine}{Exception}{Properties:j}

这导致在{NewLine}、异常细节和属性之前添加

如果将{NewLine}添加到输出模板的末尾,则将得到同一行的{} .

代码语言:javascript
复制
{Message}{Exception}{Properties:j}{NewLine}
票数 2
EN

Stack Overflow用户

发布于 2020-04-15 23:19:38

您可能考虑的一个选项是使用Serilog格式化程序(如Serilog.Formatting.Json.JsonFormatterSerilog.Formatting.Compact.CompactJsonFormatter )--有关格式化输出的更多信息,请参见Serilog,以及下面有关如何配置该appsettings.json文件的图像。或者,您也可以创建自己的自定义格式化程序--参见CompactJsonFormatter中的一个示例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61139938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档