我正在使用Serilog并希望打印包含上下文属性的一些信息消息。
例如:
var logger = Log.ForContext("FirstName", "Yosi");
logger.Information("Hello {FirstName}")
并且这可以正常工作,但是当我将参数添加到日志消息中时,我会得到意想不到的结果。
var logger = Log.ForContext("FirstName", "Yosi");
logger.Information("Hello {FirstName} {LastName}", "Attias")
我希望结果是:
你好Yosi Attias
但我明白了:
您好Attias {LastName}
有没有解决方法?我错过了什么吗?或者这是一个错误?
答案 0 :(得分:2)
仅根据传递给日志记录方法的参数评估消息模板。无论程序中的任何其他配置/上下文如何,日志语句都可以始终如一地工作。
如果要向日志记录输出添加其他属性,请将它们添加到正在配置的任何接收器的outputTemplate
参数中:
Log.Logger = new LoggerConfiguration()
.WriteTo.ColoredConsole(outputTemplate:
"{Timestamp:HH:mm} [{Level}] ({LastName}) {Message}{NewLine}{Exception}")
.CreateLogger();
答案 1 :(得分:0)
使用反射自动添加属性及其值以将它们全部记录在 Serilog 中:
public static Task GenericLog(MyClassLog myclassLog, string message=null)
{
if (string.IsNullOrEmpty(message)) message = nameof(myclassLog);
var properties = typeof(MyClassLog).GetProperties();
var propertyEnrichers = new PropertyEnricher[properties.Length];
for (int i = 0; i < properties.Length; i++)
propertyEnrichers[i] =
new PropertyEnricher(
properties[i].Name,
properties[i].GetValue(myclassLog)
);
var withProps = Log.ForContext(propertyEnrichers);
withProps.Debug(message);
return Task.CompletedTask;
}