[英].Net Serilog Email
我有一個 C# .net 5 Web 應用程序和 API,我正在嘗試將 Serilog 添加到其中。 我有用於電子郵件和 ms sql 的 serilog 接收器,但電子郵件似乎只在直接使用 Log 時發送。 這就是我所擁有的(為簡潔起見,有些項目未顯示):
在 Program.cs 中
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder();
BuildConfig(builder);
Log.Logger = CreateLogger(builder);
try
{
CreateHostBuilder(args).Build().Run();
}
catch (Exception e)
{
Log.Fatal(e, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
public static Serilog.ILogger CreateLogger(ConfigurationBuilder builder)
{
var emailSettings = Configuration.GetSection("Serilog").GetSection("WriteTo").GetSection("0").GetSection("Args");
var emailInfo = CreateEmailInformation(emailSettings);
return new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.Enrich.FromLogContext()
.WriteTo.Email(emailInfo)
.CreateLogger();
}
所以上面的 Log.Fatal(...) 確實發送了一封電子郵件,但是在下面的 API 服務中 _logger 不發送電子郵件:
private readonly AppDbContext _context;
private readonly ILogger<CollectionRepository> _logger;
public CollectionRepository(AppDbContext appDbContext, ILogger<CollectionRepository> logger)
{
_context = appDbContext;
_logger = logger;
}
public async Task<List<amp.collection>> GetCollections()
{
var result = new List<amp.collection>();
try
{
result = await db.GetCollections();
}
catch (Exception e)
{
_logger.LogError(e, "Exception occurred in GetCollections()");
}
return result;
}
為什么 _logger 不發送電子郵件,我錯過了什么?
更新問題似乎是由於電子郵件的異步。 在測試並在 _logger.Error() 之后立即添加 Log.CloseAndFlush() 后,電子郵件將被發送。
我沒有測試這是否有任何區別。 但至少我是這樣設置的:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseSerilog();
});
我知道這里有一個與ILogger
一起使用的示例(以獲取靈感): https ://github.com/elmahio/serilog-sinks-elmahio/tree/main/examples/Serilog.Sinks.ElmahIo.AspNetCore31
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.