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