0

确定我以前使用过这个过滤器,但是......我有调试的级别,过滤器关闭(即,在匹配=真时接受),以及过滤器命名空间中的 _log.Debug("whatever")那不是输出。

我在这样的类中定义了一个记录器,它是过滤器中使用的命名空间的一部分:

    private static readonly ILog _logger = LogManager.GetLogger(typeof(IEntityWithTypedId<>));

关于如何弄清楚为什么我什么都没有看到以及如何解决它的任何想法?

  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="Smack.Core.Lib.DomainSuperTypes.EntityImpl" />
        <acceptOnMatch value="true" />
      </filter>
      ...
    </appender>
    <root>
      <appender-ref ref="ConsoleAppender"/>
      <level value="DEBUG"/>
    </root>
  </log4net>

更新

好吧,我当然在做一些愚蠢的事情;我一直在一个新项目中,我还没有添加对 log4net 的引用!

不过,这是个好消息,因为它仍然无法正常工作。然而,它不是过滤器,因为当从不同的项目运行时,它确实按预期工作。添加 watch=true 程序集属性也无济于事。

虽然这是其他愚蠢和明显的事情(比如没有对 log4net 的引用!)但我还没有看到它。

解决

我没有看到的输出是从依赖项目中的记录器到我添加的新记录器。该解决方案有多个项目,它们都通过符号链接共享相同的 app.config,这就是为什么我希望新项目中的工作与其他项目一样。但它当然没有。

直到我实际上在新项目中添加了一个记录器!现在一切都神奇地起作用了,所以我想这就是原因(如果是这样的话,不能说这真的是一个很好的 log4net 功能)。

4

2 回答 2

2

您是否定义了 XMLConfigurator 观察者?这指示 log4net 读取 log4net 配置。

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
于 2013-05-26T20:09:42.353 回答
1

取下过滤器,然后重试。

于 2013-05-26T20:18:06.517 回答