C# 根据情况将log4net登录到不同的Appender

C# 根据情况将log4net登录到不同的Appender,c#,.net,log4net,castle-windsor,C#,.net,Log4net,Castle Windsor,我正在使用log4net,在一个类中需要登录到RollingFile appender,但在另一个类中,我希望登录到事件日志+滚动文件+控制台appender 最佳做法是什么?我能看一些示例代码吗 为了让事情变得更困难,我正在使用Castle Windsor Logging Facility和Log4net来解决我的Logger实例 如果有帮助的话,我在下面思考这个问题,但不知道这是否是最佳做法,也不知道如何基于“名称”激活特定的记录器,仍然使用温莎当前的记录器实例: log4net.confi

我正在使用log4net,在一个类中需要登录到RollingFile appender,但在另一个类中,我希望登录到事件日志+滚动文件+控制台appender

最佳做法是什么?我能看一些示例代码吗

为了让事情变得更困难,我正在使用Castle Windsor Logging Facility和Log4net来解决我的Logger实例

如果有帮助的话,我在下面思考这个问题,但不知道这是否是最佳做法,也不知道如何基于“名称”激活特定的记录器,仍然使用温莎当前的记录器实例:

log4net.config:

...
    <logger name="EventLogOnly">
      <level value="ALL" />
      <appender-ref ref="EventLogAppender" />
    </logger>
    <logger name="ConsoleEventLog">
      <level value="ALL" />
      <appender-ref ref="ColoredConsoleAppender" />
      <appender-ref ref="EventLogAppender" />
    </logger>
...
container.AddFacility("logging.facility", 
   new LoggingFacility(LoggerImplementation.Log4net, "log4net.config"));
private ILogger Logger;
public Test(ILogger logger) {
  Logger.Info("Can I log under event log only?");
  Logger.Info("Now can I log under both?");
}
要记录的类:

...
    <logger name="EventLogOnly">
      <level value="ALL" />
      <appender-ref ref="EventLogAppender" />
    </logger>
    <logger name="ConsoleEventLog">
      <level value="ALL" />
      <appender-ref ref="ColoredConsoleAppender" />
      <appender-ref ref="EventLogAppender" />
    </logger>
...
container.AddFacility("logging.facility", 
   new LoggingFacility(LoggerImplementation.Log4net, "log4net.config"));
private ILogger Logger;
public Test(ILogger logger) {
  Logger.Info("Can I log under event log only?");
  Logger.Info("Now can I log under both?");
}

谢谢各位。

您可以通过对附加器应用过滤器来实现这一点。只有当日志事件通过过滤器时,该附录程序才会记录该事件

此筛选器配置将仅记录来自名为“MyLogger”的记录器的事件:


,或的过滤器部分,以获取更多详细信息。

谢谢Michael,但我仍然不确定如何按名称访问我的记录器。使用Castle Windsor中的日志记录功能,我不会使用LogManager.GetLogger(“loggerName”)实例化新实例,而是为我传递一个实例。您阅读了我回答中的链接了吗?除了记录器名称之外,还有很多可以筛选的内容。对不起,是的,我知道您在谈论筛选器,但是为了让这个appender开始工作,我假设我仍然需要按名称访问记录器。我怎样才能把阿佩德接走?使用around appender在之前是有效的,我是否应该尝试将这个过滤后的appender包装进去,而不是实际的命名记录器?对不起,没有“包装”这个。指向那个EventLogAppender。然而,我的问题实际上仍然存在,因为我似乎无法将记录器命名为“MyLogger”。log4net SDK对我没有帮助,因为这是我可能需要通过日志记录工具指定的条件。不,您不需要按名称访问日志记录程序,除非您使用需要它的筛选器。在这里,您可以找到一种创建命名记录器实例的方法