Serilog sink 不是从 lambda 记录的



对于我的WebAPI,.UseSerilog(( 似乎在我的本地盒子上运行的 LocalEntryPoint om 我的 .Net Core 3.1 API 上按预期工作。但是,当我使用 LambdaEntryPoint 的 IWebHostBuilder 部署到 AWS Lambda 时,它似乎没有记录任何内容。我的 LambdaEntryPoint 的 IWebhostBuilder 是:

protected override void Init(IWebHostBuilder builder)
{
try
{
builder
.ConfigureLogging(logger =>
{
logger.ClearProviders();
logger.AddSerilog(dispose: true);
);


Log.Information("The IWebHostBuilder has been built");
}
catch (System.Exception ex)
{
Log.Fatal(ex, ex.Message);
}
finally
{
Log.CloseAndFlush();
}

}

有没有人找到一种在 AWS Lambda 中部署的应用程序中使用 serilog 进行记录的方法?

您将需要使用 .IWebHostBuilder 的 UseSerilog(( 扩展名直接如下所示:

protected override void Init(IWebHostBuilder builder)
{
builder
.UseSerilog()
.UseStartup<Startup>();
}

我的理解是,这会覆盖Microsoft.Extensions.Logging命名空间的默认ILogger实现。

然后在 Startup 类的 ConfigureServices(IServiceCollection services( 方法中,您将实现 Serilog.Core.Logger 的单例,如下所示:

var loggerConfig = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.Enrich.WithThreadId()
.Enrich.FromLogContext()
.Enrich.WithProperty("Application", "MyApplicationName")
.Enrich.WithProperty("Machine", Environment.MachineName)
.WriteTo.Console(new RenderedCompactJsonFormatter());
var logger = loggerConfig.CreateLogger();
services.AddSingleton<Logger>(logger);

此时,你已将依赖项将记录器注入到 aspnetcore 应用程序中,并且可以在控制器中使用它,如下所示:

private readonly Logger _log;
public DefaultController(Logger logger)
{
_log = logger;
}
[HttpGet]
public IActionResult Get()
{
_log.Information("This is an example of an information log");
return Ok(new string[] { "value1", "value2" });
}