Serilog是记录类型而不是对象内容

Rob*_*man 1 c# logging serilog

我是Serilog的新手,请尝试一下是否有帮助。我正在使用Serilog v2和Serilog.Sinks.MsSqlServer v5

我有以下控制台应用程序代码:

static void Main(string[] args)
    {
        var logger = CreateLogger();

        var employee = new Person()
        {
            Name = "Rob",
            Age = 45
        };

        logger.Debug("Employee details {Employee}", employee);

        Console.ReadKey();

    }

private static ILogger CreateLogger()
    {

        string levelString = SSOSettingsFileManager.SSOSettingsFileReader.ReadString(
                            "LCC.Common", "Serilog.MinimumLevel");

        SerilogLevel level = (SerilogLevel)Enum.Parse(typeof(SerilogLevel), levelString);

        string conString = SSOSettingsFileManager.SSOSettingsFileReader.ReadString(
                            "LCC.Common", "Serilog.ConnectionString");

        var levelSwitch = new LoggingLevelSwitch();
        levelSwitch.MinimumLevel = (Serilog.Events.LogEventLevel)level;

        return new LoggerConfiguration()
            .MinimumLevel.ControlledBy(levelSwitch)
            .WriteTo.MSSqlServer(connectionString: conString, tableName: "Logs", autoCreateSqlTable: true)
            .CreateLogger();
    }
Run Code Online (Sandbox Code Playgroud)

我希望可以记录到Person的详细信息,即Name Rob和Age45。但是,我发现以下记录到Sql Server Sink的Properties列中:

<properties><property key='Employee'>ConsoleApplication1.Person</property></properties>
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?

ole*_*ksa 5

这是Serilog文档

对于此任务,Serilog提供了@解构运算符。

var sensorInput = new { Latitude = 25, Longitude = 134 };
Log.Information("Processing {@SensorInput}", sensorInput);
Run Code Online (Sandbox Code Playgroud)

如您所见,要进行销毁,您必须在键名之前设置@。您的示例代码中错过了

logger.Debug("Employee details {Employee}", employee);
Run Code Online (Sandbox Code Playgroud)