Log4net 每个命名空间有不同的附加器
我正在尝试建立一个通用日志库,它根据当前堆栈确定Log4net 每个命名空间有不同的附加器,log4net,Log4net,我正在尝试建立一个通用日志库,它根据当前堆栈确定ILog实例,并确定ILog的最佳实例 我的配置设置如下: 我有一节课是这样的: namespace MyAssembly.MyNamespace.SubNamespace{ 公共类MyClass{…} } 当我尝试获取ILog的实例时,我传入类型(var log=LogManager.GetLogger(typeof(MyClass)).Namespace)),我希望它检测到没有配置任何记录器,因此它将在名称空间树中上升一级(到MyAsse
ILog
实例,并确定ILog的最佳实例
我的配置设置如下:
我有一节课是这样的:
namespace MyAssembly.MyNamespace.SubNamespace{
公共类MyClass{…}
}
当我尝试获取ILog
的实例时,我传入类型(var log=LogManager.GetLogger(typeof(MyClass)).Namespace)代码>),我希望它检测到没有配置任何记录器,因此它将在名称空间树中上升一级(到MyAssembly.MyNamespace
),然后查看是否在该点配置它
问题是为MyAssembly.MyNamespace.SubNamespace
返回的ILog
是为警告事件(及以上)配置的,基本上是为其父级配置的。当所需名称包含定义的名称时,而不是当它等于该名称时,Log4net似乎返回ILog
当名称与配置中定义的名称相同时,如何让Log4net仅返回有效的记录器?Log4net
根据记录器的名称将其视为存在于层次结构中,因此名为MyAssembly.MyNamespace.SubNamespace
的记录器是名为MyAssembly.MyNamespace
的记录器的子记录器
如果没有为记录器指定级别(警告等),系统将遍历记录器层次结构,直到找到具有配置级别的记录器,并且该级别将成为该记录器的有效级别
在您的情况下,子记录器没有指定级别,因此它继承其父-警告的级别。如果您指定
<logger name="MyAssembly.MyNamespace.SubNamespace">
<level value="DEBUG" /> <!-- or whatever -->
<!-- no need to specify appenders, will use parent's -->
</logger>
然后您将从子记录器获得调试输出(发送到为父记录器配置的appender)。也许记录器实例的依赖项注入将是一个更好的设计?@Mitch-Wheat:True使用MEF之类的工具会很好,但我们有一个无DI的实现,我只是在尝试调整