使用serilog和Castle winsdor日志时,Logger.InfoFormat没有记录第一个参数。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用serilog和Castle winsdor日志时,Logger.InfoFormat没有记录第一个参数。相关的知识,希望对你有一定的参考价值。
我使用Serilog在控制台和ElasticSearch中记录我的请求和响应。
代码是这样的。
public class HttpLogDto
{
public string Method { get; set; }
public string Url { get; set; }
public string QueryString { get; set; }
public Dictionary<string, string[]> RequestHeaders { get; set; }
public DateTime RequestedAt { get; set; }
public string Request { get; set; }
public Dictionary<string, string[]> ResponseHeaders { get; set; }
public DateTime ResponsedAt { get; set; }
public object Response { get; set; }
public long ElapsedMilliseconds { get; set; }
}
public class RequestResponseLoggingMiddleware
{
private readonly Castle.Core.Logging.ILogger _logger;
public RequestResponseLoggingMiddleware(RequestDelegate next,Castle.Core.Logging.ILoggerFactory loggerFactory)
{
_next = next;
_logger = loggerFactory.Create(typeof(RequestResponseLoggingMiddleware));
}
public async Task Invoke(HttpContext context)
{
HttpLogDto logDto = new logDto();
//perform request and fill logDto
_logger.InfoFormat("{"Url": {0},"Method": {1}, "QueryString": {2},"RequestHeaders": {3},"RequestedAt": {4} }",
new object[] {
logDto.Url,
logDto.Method,
logDto.QueryString,
logDto.RequestHeaders,
logDto.RequestedAt});
}
}
问题是,它从来没有填入第一个参数,输出日志是这样的。
答案
我去掉了文本前后的两个大括号,这样就解决了问题。
以上是关于使用serilog和Castle winsdor日志时,Logger.InfoFormat没有记录第一个参数。的主要内容,如果未能解决你的问题,请参考以下文章
如何在 appsettings.json 中使用多个单独的记录器 Serilog 文件
Serilog:无法使用 MongoDb 接收器登录到 MongoDb