Serilog不在MongoDB上写,也不会引发任何错误

时间:2019-09-13 10:01:31

标签: c# mongodb asp.net-core serilog

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

非常感谢大家。

  

这是C#Asp.Net WebApi .Net Core 2.2应用程序   我在下面安装了nuget软件包:   Serilog.AspNetCore(3.0.0)(及其依赖关系)   Serilog.Sinks.File(4.0.0)(及其依赖关系)   Serilog.Sinks.MongoDB(4.0.0)(及其依赖关系)

我的Program.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:mypassword@222.111.55.123: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();
   ...
}

我使用过的一个简单的测试控制器

[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";
     }
}

1 个答案:

答案 0 :(得分:1)

我找到了问题。 mongoDb凭证错误。 我用这个有用的serilog功能检查了问题

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

这将显示所有serilog错误的输出。

serilog debug guide