gpt4 book ai didi

.net - Log4Net 是否具有可与 Log4J 的标记相媲美的功能?

转载 作者:行者123 更新时间:2023-12-01 23:49:11 26 4
gpt4 key购买 nike

log4net 是否有类似于 log4j's Markers 的东西? ?

Markers are objects that are used to add easily filterable information to log messages.

我已经查看了 log4net API ,但 ILog 接口(interface)没有任何方法可以接受任何可以解释为标记类型事物的额外标记。

例如,我只想记录到单个记录器:

ILog logger = LogManager.GetLogger(typeof(MyClass));
logger.Error("This is an error!");

但是,有时我会希望将这些错误放在事件日志中。

目前我创建了第二个记录器并引用了一个 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 中是否还有其他选项来实现标记类型系统?

最佳答案

log4net的ILog界面没有标记,但是可以用property filters将您的事件路由到正确的记录器:只需在您的代码中创建一个记录器并将所有事件发送到该记录器。在你的根配置中设置你想要的两个 appender

root
event log appender
file appender

然后在每个附加程序中过滤掉具有或不正确属性值的消息,例如

<!-- filter in the event log appender -->
<filter type="log4net.Filter.Property">
<key value="ToEventLog" />
<stringToMatch value="true" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />

虽然它是移植到属性而不是消息的神奇字符串,并且您需要将日志记录包装在一些设置属性的代码中:使用 IDisposable 来包装属性的设置和拆卸可能是个好主意,比如:

log.Info("To wherever!!");
using (var SendToEventLogSwitch = new EventLogSwitch)
{
log.Info("To EventLog!!");
}

您还可以在 ILog 上使用扩展方法来添加标记并在幕后使用属性机制。

public static void EventLog(this ILog log, string message)
{
log4net.ThreadContext.Properties["ToEventLog"] = "true";
log.Info(message);
log4net.ThreadContext.Properties["ToEventLog"] = "false";
}

关于.net - Log4Net 是否具有可与 Log4J 的标记相媲美的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27409370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com