0

I must log some methods. In one method I must log everything. In all others method I've just log exception... I have done this configuration:

<log4net>
  <appender name="OneMethodFileAppender" type="log4net.Appender.RollingFileAppender">
    ...

    <filter type="log4net.Filter.PropertyFilter">
      <key value="realMethod" />
      <stringToMatch value="xxx" />
      <acceptOnMatch value="true" />
    </filter>
  </appender>

  <appender name="WebsiteFileAppender" type="log4net.Appender.RollingFileAppender">
    ...

    <filter type="log4net.Filter.PropertyFilter">
      <key value="realMethod" />
      <stringToMatch value="xxx" />
      <acceptOnMatch value="false" />
    </filter>
  </appender>

  <root>
    <appender-ref ref="WebsiteFileAppender">
      <threshold value="ERROR" />
    </appender-ref>
    <appender-ref ref="OneMethodFileAppender">
      <threshold value="INFO" />
    </appender-ref>
  </root>
</log4net>

So, when I match the property realMethod I should use the appender OneMethodFileAppender that log at the INFO level; in all other cases i should use the appender WebsiteFileAppender that log at ERROR level.

I have a different output. 1. When i match the method xxx everything works correctly. I mean that a log at INFO level in the correct log. 2. But when I do not match the method xxx, I log in both files and both at INFO level.

Bhargav Rao
  • 41,091
  • 27
  • 112
  • 129
Ciccio
  • 1,703
  • 3
  • 23
  • 62

1 Answers1

1

I would suggest to use the logger element to configure your logging:

<log4net>
  <appender name="OneMethodFileAppender" type="log4net.Appender.RollingFileAppender">
    ...
  </appender>

  <appender name="WebsiteFileAppender" type="log4net.Appender.RollingFileAppender">
    ...
  </appender>

  <root>
    <appender-ref ref="WebsiteFileAppender">
      <threshold value="ERROR" />
    </appender-ref>
  </root>
  <logger name="LoggerName1">
    <level value="INFO" />
    <appender-ref ref="WebsiteFileAppender" />
   </logger>
   <logger name="LoggerName2">
    <level value="INFO" />
    <appender-ref ref="OneMethodFileAppender" />
   </logger>
</log4net>

Both methods should have there own logger:

logger = LogManager.GetLogger("logger1");
Peter
  • 26,307
  • 7
  • 58
  • 80