Serilog 是记录类型而不是对象内容
Serilog is logging type rather than object content
我是 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();
}
我本来希望记录人员的详细信息,即姓名 Rob 和年龄 45。但是,我发现以下内容记录到我的 Sql Server Sink 的 Properties 列中:
<properties><property key='Employee'>ConsoleApplication1.Person</property></properties>
我哪里错了?
日志框架将对传递给它的对象调用 ToString。如果您想要记录详细信息,一种选择是覆盖 ToString 方法以序列化对象(假设引用 Newtonsoft.JSON 库):
// in Person.cs
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
For this task, Serilog provides the @ destructuring operator.
var sensorInput = new { Latitude = 25, Longitude = 134 };
Log.Information("Processing {@SensorInput}", sensorInput);
如您所见,要进行解构,您必须在键名前设置@。这在您的示例代码中遗漏了
logger.Debug("Employee details {Employee}", employee);
我是 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();
}
我本来希望记录人员的详细信息,即姓名 Rob 和年龄 45。但是,我发现以下内容记录到我的 Sql Server Sink 的 Properties 列中:
<properties><property key='Employee'>ConsoleApplication1.Person</property></properties>
我哪里错了?
日志框架将对传递给它的对象调用 ToString。如果您想要记录详细信息,一种选择是覆盖 ToString 方法以序列化对象(假设引用 Newtonsoft.JSON 库):
// in Person.cs
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
For this task, Serilog provides the @ destructuring operator.
var sensorInput = new { Latitude = 25, Longitude = 134 };
Log.Information("Processing {@SensorInput}", sensorInput);
如您所见,要进行解构,您必须在键名前设置@。这在您的示例代码中遗漏了
logger.Debug("Employee details {Employee}", employee);