Serilog, ExceptionDetails и outputTemplate - PullRequest
0 голосов
/ 10 апреля 2020

Я работаю с. Net Core 3.1 и Serilog, но у меня есть небольшая, но раздражающая проблема с выводом журнала.

Конфигурация

Мой appsettings.json равен

{
  "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}, и это обязательно, если вы хотите регистрировать исключения и подробности исключений.

К сожалению, Я заметил, что вывод не отформатирован. Посмотрите здесь:

[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} из моей конфигурации файл.

Есть идеи по решению проблемы?

Спасибо. Аттило

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

{} в начале каждой строки - это содержимое вашего Properties как JSON (пустой объект), потому что у вас нет свойств, определенных для этих сообщений журнала. Он появляется в начале следующей строки из-за того, как вы определили шаблон вывода:

{Message}{NewLine}{Exception}{Properties:j}

Это приводит к добавлению {NewLine} до сведений об исключении и свойств .

Если вместо этого вы добавите {NewLine} в конец шаблона вывода, вы получите {} в той же строке ...

{Message}{Exception}{Properties:j}{NewLine}
1 голос
/ 16 апреля 2020

Один вариант, который вы могли бы рассмотреть, - это использовать средство форматирования Serilog, такое как Serilog.Formatting.Json.JsonFormatter или Serilog.Formatting.Compact.CompactJsonFormatter - см. Вики Serilog для получения дополнительной информации о выводе форматирования , а также Изображение ниже о том, как настроить этот файл appsettings. json. В качестве альтернативы вы можете создать свой собственный форматер - см. CompactJsonFormatter , например.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...