2

我正在尝试为 log4net 编写一些扩展方法,一个要求是用户可以指定他希望我的扩展在哪个级别上记录消息。

现在我希望能够检查我的 log4net 记录器中是否启用了该级别。

我知道我可以检查

ILog log = LogManager.GetLogger(....);

if(log.IsDebugEnabled) 
{
   // log something
}

但是有没有办法给定一个log4net.Core.Level变量来检查该级别是否启用?

所以我希望可能有类似的东西:

ILog log = LogManager.GetLogger(....);
log4net.Core.Level myLevel = Level.Warn;

if(log.IsLevelEnabled(myLevel))
{
   // log something
   log.Log(myLevel, message);
}

有没有办法做到这一点?

解决方案: peer提到 - 隐藏在其中一条评论中 - 如何做到这一点:

但是,您可以获得记录器实现:log.Logger.IsEnabledFor()...并且log.Logger.Log(...)可以帮助您,该Log功能不打算直接使用。

所以现在我可以轻松使用:

if(log.Logger.IsEnabledFor(myLevel)) 
{
   // log something 
}
4

1 回答 1

2

您可以为 ILog 制作扩展方法:

public static class Log4NetExtensionMethods
{
    public static bool IsLevelEnabled( this ILog log, log4net.Core.Level level)
    {
        ...
    }

    public static void LogAtLevel( this ILog log, log4net.Core.Level level, string message)
    {
        ...
    }
}
于 2013-03-27T13:59:41.590 回答