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

Log4net中GlobalContext属性作为PropertyFilter过滤不生效如何正确配置?

问题根因
  • 配置执行顺序错误:GlobalContext属性必须在调用XmlConfigurator.Configure()之前完成赋值,log4net初始化配置时会绑定上下文属性的读取逻辑,配置完成后再赋值的全局属性不会被已初始化的过滤器识别,也就是你看到的LoggingEvent.Properties为空的原因。
  • PropertyFilter缺少匹配规则配置:默认情况下PropertyFilter匹配成功后不会直接放行日志,需要显式配置acceptOnMatch参数,否则匹配后会继续走后续过滤规则,最终可能被默认规则丢弃。
修复步骤

1. 调整Program.cs代码执行顺序

把GlobalContext赋值的代码移到Configure调用之前,修正后的代码如下:

class Program
{
    private static ILog log;
    static void Main(string[] args)
    {
        string appName = "MyApp";
        // 先设置全局上下文属性,再初始化log4net配置
        log4net.GlobalContext.Properties["ApplicationName"] = appName;
        log4net.Config.XmlConfigurator.Configure();
        log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        log.Info("Info Log!" + appName);
        log.Error("Error Log!" + appName);
        log.Warn("Warn Log!" + appName);
        log.Debug("Debug Log!" + appName);
        log.Fatal("Fatal Log test!" + appName);
        Console.WriteLine("Hit enter");
        Console.ReadLine();
    }
}

2. 修改app.config中的PropertyFilter配置

补充acceptOnMatch参数,末尾新增DenyAllFilter明确过滤逻辑,避免不匹配的日志被误记录:

<appender name="file" type="log4net.Appender.RollingFileAppender">
  <file value="app.log" />
  <filter type="log4net.Filter.PropertyFilter">
    <Key value="ApplicationName" />
    <StringToMatch value="MyApp" />
    <!-- 匹配到对应属性时直接接受日志 -->
    <acceptOnMatch value="true" />
  </filter>
  <!-- 拒绝所有未匹配上的日志 -->
  <filter type="log4net.Filter.DenyAllFilter" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="5" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="Date:%date Thread:[%thread] Level:%-5level Logger:%logger - ApplicationName:%P{ApplicationName}; Message:%message%newline" />
  </layout>
</appender>
补充说明

如果确实有需要在配置初始化后修改全局属性的场景,可以在修改属性后再次调用XmlConfigurator.Configure()重新加载配置,即可让新的属性值被过滤器识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:48:02