为什么在Log4Net中命名为logger?我一直在研究使用CastleWindsor将Log4NetILog注入到类中。在大多数示例中,我看到CastleWindsor可以提供一个“助手”,它提供属性注入并注入ILogger(而不是ILog)。我只找到了一个使用构造函数注入但不使用辅助方法的示例(请参阅CastleWindsordependency注入:使用调用者类型作为参数)在所有这些示例中,Log4Net似乎需要一个命名记录器。大多数示例引用Log4Net静态方法LogManager.GetLogger(此处为类名)。这使得在不使用反射或辅助方法(辅助方法可与ctor注入一起使用)的情况下定义对CastleWindsor的依赖项成为一项挑战。在查看IlyaKogan的问题(上面的URL...)时,我认为我不明白为什么需要甚至想要命名记录器。我不能到处使用同名的记录器吗?例如,我不能只用硬编码的XXX名称注册一个记录器吗?(它似乎工作正常,最后,我只想记录-我不关心哪个记录器记录它......)是否存在范围问题?是否存在内存泄漏问题?为什么记录器不能/不应该是单身人士?publicvoidInstall(IWindsorContainercontainer,IConfigurationStorestore){container.Register(Component.For().UsingFactoryMethod(()=>log4net.LogManager.GetLogger("xxx")));}更新:经过一些研究,可以使用硬编码的命名记录器——例如上面示例中的XXX,但是如果记录器配置为将记录器名称输出到日志文件,并且记录器名称动态分配给与方法或类同名,您将自动获得对日志源引用的访问权限。日志文件中的上下文非常有用。具体到ctor注入时,似乎有5种可能的选择......使用CastleWindsor进行DILog4Net日志记录的推荐方法是使用Facilities。已经为Log4Net创建了一个,其用法在本教程中进行了演示。好问题。简而言之,log4net需要命名记录器,因为这些名称用于过滤日志输出(有关详细信息,请参阅log4net文档)。类型名称只是一个方便的约定,因为它为您提供了额外的上下文,并且正确使用名称空间允许您执行诸如“将所有NHibernate消息记录到一个单独的文件”之类的事情,这就是为什么通常情况下,如果您不使用容器,您在您的班级中有一个静态记录器属性/字段。您所指的ILogger是Castle中的日志记录抽象,其中之一可用于log4net。虽然LoggingFacility为提供对ILogger的依赖性提供了开箱即用的支持,但它绝不会强迫您这样做。您的ILog注册应该重写如下(我是凭记忆写的,所以细节可能略有不同):Component.For().UsingFactoryMethod((k,c)=>log4net.LogManager.GetLogger(c.RequestedType))。LifestyleTransient()c.RequestedType将为您提供满足依赖关系的类型,并将其设为瞬态将避免所有类型将重用以请求依赖问题的第一种类型命名的记录器的单个实例。以上是C#学习教程:Log4Net中为什么叫logger?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
