Serilog sink mongodb 转换为 Json

问题描述

我有一个 .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 (将#修改为@)