Home > Net >  Console logger with json formatter does not serialize objects
Console logger with json formatter does not serialize objects

Time:02-17

I try to use default .NET core logging tools without any third party libs. So, question. Does console logger with Json formatter support json serialization of objects?

I have the following config in appsettings

"Logging": {
    "Console": {
      "LogLevel": {
        "Default": "Debug",
        "System": "Information",
        "Microsoft": "Information",
        "Microsoft.Hosting.Lifetime": "Information"
      },
      "FormatterName": "json",
      "FormatterOptions": {
        "SingleLine": true,        
        "JsonWriterOptions": {
          "Indented": true
        }
      }
    }
  },

The following line

logger.LogDebug("RequestId:{requestId} ResponseInfo: {@response} ", requestName, response);

produces the output with string representation of @response object, internally it still invokes ToString(), but docs in Caution section says that

The logging infrastructure itself already manages the serialization of log messages, so if you're to pass in a log message that is already serialized—it will be double serialized docs

And this point me that it should serialize object.

CodePudding user response:

I think the build-in ILogger don't support this. That's why we can try the new System.Text.Json source generator.

The new System.Text.Json source generator can improve logging performance.


I think we also can choose third-party package, like Serilog. That should be more easy to do this.

  • Related