2

我想将 Serilog 消息模板与 Loggly 一起使用。

我已经在我的应用程序中配置了带有 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)
4

1 回答 1

4

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

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.")
于 2019-08-19T18:30:16.167 回答