【发布时间】:2014-12-10 19:34:49
【问题描述】:
log4net 有与log4j's Markers 相媲美的东西吗?
标记是用于向日志消息添加易于过滤的信息的对象。
我查看了log4net API,但 ILog 接口没有任何方法可以接受任何可以解释为标记类型的东西的额外标记。
例如,我只想记录到单个记录器:
ILog logger = LogManager.GetLogger(typeof(MyClass));
logger.Error("This is an error!");
但是,有时我希望将这些错误放在 EventLog 中。
目前,我创建了第二个记录器,并引用了 EventLogAppender。它也继承了根记录器的所有附加程序。
这意味着我需要在要记录的类中有 2 个记录器引用。 1 用于记录到事件日志,1 用于我不想进入事件日志的日志:
ILog logger = LogManager.GetLogger(typeof(MyClass)); //root logger
ILog eventLogger = LogManager.GetLogger("EventLogger"); //eventlog logger
logger.Info("Some message that doesn't need to go to the event log.");
eventLogger.Error("Some error that does need to go to the event log.");
有了标记,我可以做类似的事情
logger.Info(EVENT_LOG_MARKER, "This message should go to the event log.");
然后过滤器会拾取标记,并激活适当的附加程序。
我可以在消息的开头附加一个魔术字符串,然后使用过滤器将其挑选出来,但这充其量看起来是很骇人听闻的。
没有使用魔术字符串,log4net 中是否还有其他选项可以实现 Marker 类型系统?
【问题讨论】: