我对log4net
库有疑问。
是否存储了通过调用LogManager.GetLogger
创建的实例并且它是否已到期?我问,因为我想知道是否更好地包装log4net以在调用Log<T> method
时创建实例
因为我正在包装log4net库,所以字符串参数构造开销就在那里,因为我现在要在包装方法上检查IsDebugEnabled
等等。开销是否是易于使用的代价,或者我应该通过大量If(IsDebugEnabled)
检查来混淆我的代码?
为了更好地可视化,这里是包装器的代码。
private static void logOnDebug(string message, Exception ex, bool isAsync)
{
if (!_logger.IsDebugEnabled)
return;
if (isAsync)
Task.Factory.StartNew(() => _logger.Debug(message, ex));
else
_logger.Debug(message, ex);
}
答案 0 :(得分:1)
所有记录器都保存在Hierarchy
类(实现IRepository
)的哈希表中。 Clear
上有一个清空哈希表的方法Hierarchy
。哈希表上没有隐式过期。
这个问题是主观的,取决于构建邮件的费用和偏好。 Castle做了我喜欢的事情,即为ILogger添加一个新的签名(他们对日志记录的自定义抽象),它以Func<string>
为参数。在测试级别并查看是否要记录事件之前,不会评估lambda:
Logger.Info(()=&gt; VeryExpensiveStringBuilding());