问题描述
我有一个 .Net 核心 3.1 API。我想将来自控制器的 JSON 请求和响应记录到 Serilog 接收器 MongoDB。 我已经在 netstandrad2.1 中配置了接收器,并将其注入到我的应用程序中。 这是我的配置的样子:
public ILoggerFactory ConfigureLogger()
{
string connectionString = GetConnectionString();
LoggerFactory factory = new LoggerFactory();
LoggerProviderCollection Providers = new LoggerProviderCollection();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft",LogEventLevel.@R_929_4045@ion)
.Enrich.FromLogContext()
.Writeto.MongoDB(connectionString,restrictedToMinimumLevel: LogEventLevel.Debug,collectionName: "logs")
.Writeto.Providers(Providers)
.CreateLogger();
factory.AddSerilog();
return factory;
}
public static string GetConnectionString( )
{
var configuration = new ConfigurationBuilder()
.AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(),"appsettings.json"),optional: false)
.AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(),"appsettings.Development.json"),optional: false)
.Build();
string ConnectionString = configuration.GetSection("RequestsDatabaseSettings").GetSection("ConnectionString").Value;
return ConnectionString;
}
我的控制器看起来像这样:
[Route("api/[controller]")]
[ApiController]
public class RequestsController : Controller
{
readonly ILogger<RequestsController> _logger;
private readonly RequestsService _requestsService;
public RequestsController(RequestsService requestsService,ILogger<RequestsController> logger)
{
_requestsService = requestsService;
_logger = logger;
}
[HttpGet]
public ActionResult<List<Request>> Get()
{
var req = _requestsService.Get();
string sJSONResponse = JsonConvert.SerializeObject(req);
_logger.Log@R_929_4045@ion(sJSONResponse);
return req;
}
}
这就是我在 mystartup.cs 中注入它的方式:
var loggerFactory = new LogFactory().ConfigureLogger();
_container.RegisterInstance<ILoggerFactory>(loggerFactory);
_container.RegisterConditional(typeof(ILog),c => typeof(LogAdapter<>).MakeGenericType(c.Consumer.ImplementationType),Lifestyle.Singleton,c => true);
问题是如果我不在控制器中从 List 转换为 JSON,它不会将 JSON objecto 写入日志,它只显示如下内容:
MessageTemplate:"System.Collections.Generic.List`1[Mongodb.Entity.Request]"
RenderedMessage:"System.Collections.Generic.List`1[Mongodb.Entity.Request]"
而不是显示 JSON 对象。 有没有办法在接收器配置级别将日志转换为 JSON?因为在 Controller 级别转换它会增加调用时间。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)