c# - Serilog 不会在 MongoDB 上写入,也不会抛出任何错误

标签 c# mongodb asp.net-core serilog

在我的 Web Api Net.Core 2.2 项目中,我需要使用 serilog,并且我想在云上的 MongoDB 实例上写入日志。 Serilog 在控制台和文件上已正确写入,但在 MongoDB 实例上却没有。 此外它没有抛出或记录任何错误。 我如何检查发生了什么? 我该如何修复它?

非常感谢大家。

It's a C# Asp.Net WebApi .Net Core 2.2 application I installed the nuget packages below: Serilog.AspNetCore (3.0.0) (with its dependecies) Serilog.Sinks.File (4.0.0) (with its dependecies) Serilog.Sinks.MongoDB (4.0.0) (with its dependecies)

我的程序.cs

public class Program
{
     static readonly LoggerProviderCollection Providers = new LoggerProviderCollection();

        public static int Main(string[] args)
        {
             Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
           .WriteTo.MongoDB("mongodb://myusername:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a0cdd9d0c1d3d3d7cfd2c4e09292928e9191918e95958e919293" rel="noreferrer noopener nofollow">[email protected]</a>:27017/mydbName", collectionName: "log")
            .WriteTo.Providers(Providers)
            .CreateLogger();

            try
            {
                Log.Information("Starting web host");
                CreateWebHostBuilder(args).Build().Run();
                return 0;
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
                return 1;
            }
            finally
            {
                Log.CloseAndFlush();
            }

        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseSerilog(providers: Providers);
    }

我的Startup.cs

public void ConfigureServices(IServiceCollection services){
...
services.AddLogging();
...
}

public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs, IHostingEnvironment env, ODataModelBuilder modelBuilder)
{
   ...
   app.UseSerilogRequestLogging();
   ...
}

我用过的一个简单的测试 Controller

[Route("api/[controller]")]
[ApiController]
public class ValueController : ControllerBase
{
     readonly ILogger<ValueController> _logger;

     public ValueController(ILogger<ValueController> logger)
     {
        _logger = logger;
     }

     [HttpGet]
     public string Get()
     {
        _logger.LogInformation("That's all!");
        return "Ok";
     }
}

最佳答案

我发现了问题。 mongoDb 凭据错误。 我用这个有用的 Serilog 功能检查了问题

Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));

显示输出所有 Serilog 错误。

serilog debug guide

关于c# - Serilog 不会在 MongoDB 上写入,也不会抛出任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921487/

相关文章:

c# - Listpicker 无法进入全屏模式 Windows Phone

java - mongodb java聚合操作

c# - 向 ASP.NET Core 3.1 标准 JSON BadRequest 响应添加详细消息

.net - Blazor Wasm - 如何从继承的组件更新基础组件?

c# - 处理 Icon 和 Bitmap 有区别吗?

c# - 为什么 DateTimePicker 在 Leave 事件处理程序中返回过时的值?

c# - 如何使用 Eval 减去两列

javascript - 无法连接到 mongodb

MongoDB 连接字符串到副本集

C# |在 SqlCommand 查询中使用参数