You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Durable Function(v4)使用NLog过滤非期望日志求助

解决Azure Durable Function v4中NLog过滤Azure服务日志的问题

针对你遇到的Azure服务日志(如Azure.Core.1、DurableTask.AzureStorage、Host.xxx)混入数据库日志的问题,可按以下方案逐一排查修正:

1. 修正host.json的日志过滤配置

v4版本的Function host.json日志配置有固定结构,需确保过滤规则放在logging.logLevel节点下,且使用通配符匹配日志器前缀(避免精确匹配遗漏变体):

{
  "logging": {
    "logLevel": {
      "Azure.Core": "Error",
      "DurableTask.AzureStorage": "Error",
      "Host": "Error"
    }
  }
}

2. 调整MEL过滤器的配置顺序

在Program.cs中,需先清除默认日志提供器,再添加MEL级别过滤,最后集成NLog,确保过滤逻辑先于NLog生效:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureLogging(logBuilder =>
    {
        logBuilder.ClearProviders(); // 清除默认日志提供器,避免冲突
        // 添加MEL级别的过滤规则
        logBuilder.AddFilter("Azure.Core", LogLevel.Error);
        logBuilder.AddFilter("DurableTask.AzureStorage", LogLevel.Error);
        logBuilder.AddFilter("Host", LogLevel.Error);
        // 集成NLog
        logBuilder.AddNLog(new NLogProviderOptions
        {
            CaptureMessageTemplates = true,
            CaptureMessageProperties = true
        });
    })
    .Build();

host.Run();

3. 优化NLog编程式规则(关键)

使用通配符匹配日志器前缀,并设置规则为Final=true,确保匹配到的低级别日志不再流入后续规则:

var nlogConfig = new LoggingConfiguration();
// 初始化你的数据库目标(存储过程配置)
var dbTarget = new DatabaseTarget("dbLogTarget")
{
    CommandType = System.Data.CommandType.StoredProcedure,
    CommandText = "YourLogStoredProcedure",
    // 配置存储过程参数等...
};
nlogConfig.AddTarget(dbTarget);

// 先添加拒绝规则:拦截Azure服务日志的Debug/Info/Warn级别
nlogConfig.LoggingRules.Add(new LoggingRule("Azure.Core*", LogLevel.Debug, LogLevel.Warn, dbTarget) { Final = true });
nlogConfig.LoggingRules.Add(new LoggingRule("DurableTask.AzureStorage*", LogLevel.Debug, LogLevel.Warn, dbTarget) { Final = true });
nlogConfig.LoggingRules.Add(new LoggingRule("Host*", LogLevel.Debug, LogLevel.Warn, dbTarget) { Final = true });

// 再添加允许业务日志的规则(替换为你的函数命名空间或日志器前缀)
nlogConfig.LoggingRules.Add(new LoggingRule("YourFunctionNamespace*", LogLevel.Trace, LogLevel.Fatal, dbTarget));

// 应用NLog配置
LogManager.Configuration = nlogConfig;

额外注意事项

  • 确保NLog及扩展包版本与.NET Isolated(v4 Function依赖)兼容,建议使用最新稳定版的NLog和NLog.Extensions.Logging。
  • 检查是否存在其他代码逻辑修改了日志配置,避免覆盖上述过滤规则。

内容的提问来源于stack exchange,提问作者DaPanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:12:29