在我的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";
}
}
答案 0 :(得分:1)
我找到了问题。 mongoDb凭证错误。 我用这个有用的serilog功能检查了问题
Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));
这将显示所有serilog错误的输出。