【问题标题】:Serilog doesn't write on MongoDB and it doesn't throw any errorsSerilog 不在 MongoDB 上写入,也不会抛出任何错误
【发布时间】:2020-01-15 04:53:12
【问题描述】:

在我的 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)(及其依赖项)

我的程序.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";
     }
}

【问题讨论】:

  • 在硬盘上搜索今天更改的 txt 文件。它可能在不同的文件夹中。

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


【解决方案1】:

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

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

显示输出所有 serilog 错误。

serilog debug guide

【讨论】:

    猜你喜欢
    • 2017-02-16
    • 2012-05-17
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多