如何在Loggly中使用serilog消息模板

时间:2019-08-19 17:06:47

标签: c# asp.net-core serilog loggly

我想在Loggly中使用Serilog消息模板。

我已使用Serilog配置Loggly到我的应用程序中。

var logglySettings = new LogglySettings();
configuration.GetSection("Serilog:Loggly").Bind(logglySettings);
this.SetupLogglyConfiguration(logglySettings);
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .CreateLogger();

但是我无法将多个属性发送到loggly.com

例如我要使用:

public void Error<T, T1>(string message, T property0, T1 property1)
{
    Log.Error(message, property0, property1);
}

我能够发送多个属性

 return this.logger.Error("Could not save data.", new { Exception = ex, RequestData = requestData });

但这不适合Serilog模式。

我想将Serilog记录模式用作:

public void Error<T, T1>(string message, T property0, T1 property1)

1 个答案:

答案 0 :(得分:2)

您需要提供一个消息模板,其中包含要记录的所有属性,而不仅仅是消息本身,例如

Log.Error("Error while saving {RequestData}: {Exception}", requestData, exception);

由于Log.Error的显式重载可以接受异常参数,因此建议您改用它,因为这样可以使显示更清晰,并且可以进行更深层次的解构(例如,通过Demystify)。如果您想要的不仅仅是@表示形式,例如,

,也可以使用ToString()模板字符来强制深度破坏请求数据。
Log.Error(exception, "Failed to save {@RequestData}", requestData)

或者,如果您不想在消息本身中包含请求数据,则可以将其作为上下文信息添加,例如

Log.ForContext("RequestData", requestData, destructureObjects: true)
    .Error(exception, "Could not save data.")