如何在.NET Core 3.1的Azure Functions中将Serilog配置为默认日志提供程序
解决步骤
1. 确认安装必要NuGet包
首先检查项目已安装以下依赖:
Serilog.Extensions.Logging用于对接.NET官方日志抽象Serilog.Sinks.ApplicationInsights对应你代码中的Application Insights输出配置Serilog.Enrichers.ExceptionDetails对应你代码中WithExceptionDetails扩充方法
2. 补充日志提供程序注册逻辑
你当前代码仅初始化了Serilog全局Logger实例,未将其注入到Azure Functions的日志系统中,需要在Log.Logger = ...CreateLogger();之后添加如下代码:
builder.Services.AddLogging(loggingBuilder => { // 可选:清空默认注册的日志提供程序,避免重复输出日志 loggingBuilder.ClearProviders(); // 注册Serilog为日志提供程序 loggingBuilder.AddSerilog(dispose: true); });
如果你使用的是.NET隔离进程模型的Azure Functions,无需调用上述AddLogging方法,直接在主机构建链中添加UseSerilog()即可。
3. 调整host.json过滤规则
为了避免Azure Functions宿主的默认日志规则拦截Serilog生成的日志,需要修改host.json的日志级别配置:
{ "version": "2.0", "logging": { "logLevel": { "default": "Trace", "Microsoft": "Warning", "Host.Aggregator": "Warning", "Host.Results": "Information" } } }
此处的日志级别可根据实际需求调整,不要设置过高的默认过滤阈值,避免日志被提前拦截。
4. 验证配置
完成上述修改后,你既可以通过函数构造函数注入的ILogger<T>实例写日志,也可以直接使用Log.Logger静态类写日志,两种方式的日志都会按照你配置的Serilog规则输出到控制台和Application Insights,同时携带你配置的扩充属性。
内容的提问来源于stack exchange,提问作者user16841602
相关产品推荐
相关产品推荐

