Nhibernate log4net:拒绝记录除特定组件之外的其他组件

Nhibernate log4net:拒绝记录除特定组件之外的其他组件,nhibernate,log4net,castle-activerecord,Nhibernate,Log4net,Castle Activerecord,假设您正在使用一些库,如NHibernate或Castle ActiveRecord,它们在内部使用log4net。您的应用程序也使用log4net。可以将所有应用程序配置为将日志保存到文件或任何其他输出中。但问题是,通过为我自己的应用程序启用log4net,其他程序会将其日志保存到日志文件中,并使其随着我目前不需要的信息快速增长 如何将每个应用程序的日志路由到不同的输出,或者至少如何拒绝其他应用程序的日志记录?NHibernate/Castle活动记录生成大量日志信息,但这都是调试级别的日志记

假设您正在使用一些库,如NHibernate或Castle ActiveRecord,它们在内部使用log4net。您的应用程序也使用log4net。可以将所有应用程序配置为将日志保存到文件或任何其他输出中。但问题是,通过为我自己的应用程序启用log4net,其他程序会将其日志保存到日志文件中,并使其随着我目前不需要的信息快速增长


如何将每个应用程序的日志路由到不同的输出,或者至少如何拒绝其他应用程序的日志记录?

NHibernate/Castle活动记录生成大量日志信息,但这都是调试级别的日志记录。所以你们可以在配置文件中将你们的日志级别从“全部”调低到“信息”或“错误”,你们应该可以了

log4Net还支持命名记录器和记录器层次结构。我确信NHibernate和Castle都会使用命名记录器。因此,您可以选择使用配置忽略特定的命名记录器。查看他们使用Com.Foo库的不同日志记录级别的位置


使用命名日志记录器是从不同组件/模块/库等分离日志跟踪的典型方法。每个应用程序(如在不同的过程中)将具有不同的配置文件,并且您可以始终使用不同的日志文件来分离日志跟踪。

只需将不同的日志记录器定向到不同的附加器即可

伪示例:

<log4net>
  <appender name="MyAppender" type="log4net.Appender.FileAppender">
  <!--appender properties (file name, layout, etc)-->
  </appender>
  <appender name="NHAppender" type="log4net.Appender.FileAppender">
  <!--ditto-->
  </appender>
  <logger name="MyAppMainNamespace">
    <level value="INFO"/>
    <appender-ref ref="MyAppender" />
  </logger>
  <logger name="NHibernate">
    <level value="ERROR"/>
    <appender-ref ref="NHAppender" />
  </logger>
</log4net>


如何确定NHibernate/Castle使用哪种记录器?如果在日志输出中使用%logger属性,则如果让应用程序运行,就会看到它。也许你会看到NHibernate.Sql或类似的东西。足以将记录器NHibernate配置为不写入任何消息。对于Castle来说,情况会很相似…@Stefan:真的谢谢你。它们类似于NHibernate.Loader.Loader、NHibernate.Event.Default.DefaultLoadEventListener、NHibernate.AdoNet.AbstractBatcher等