使用NHibernate时无法获取log4net输出任何内容

时间:2009-11-11 17:06:22

标签: nhibernate log4net

我在我的web.config文件中有这个(编辑以反映一些更改):

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net debug="true">
    <appender name="DebugAppender" type="log4net.Appender.AspNetTraceAppender">
      <layout type="log4net.Layout.PatternLayout, log4net">
        <param name="ConversionPattern" value="%d %p %m%n" />
      </layout>
    </appender>
    <appender name="DataLog" type="log4net.Appender.RollingFileAppender">
      <file value="c:\temp\nhlog.txt" />
      <appendToFile value="true" />
      <maximumFileSize value="100MB" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
      </layout>
    </appender>
    <root>
      <priority value="DEBUG" />
      <appender-ref ref="DebugAppender" />
    </root>
    <logger name="NHibernate" additivity="false">
      <level value="INFO"/>
      <appender-ref ref="DebugAppender"/>
    </logger>
  </log4net>

我正在从Application_Start()调用log4net.Config.XmlConfigurator.Configure()。

我的web项目的AssemblyInfo.cs文件中有[assembly:log4net.Config.XmlConfigurator(Watch = true)]。

为什么我的输出窗口中没有NHibernate调试消息? (我试图获取NHibernate吐出的所有消息。)如果我使用RollingFileAppender它可以正常工作。我已经尝试过DebugAppender,TraceAppender,OutputDebugStringAppender和AspNetTraceAppender,它们都没有输出到输出窗口。

3 个答案:

答案 0 :(得分:2)

尝试使用其他appender。

ConsoleAppender可能不适用于Web应用程序。使用类似FileAppender的东西。

有关configuraiton的示例,请参阅this

答案 1 :(得分:2)

与quip的答案类似,ConsoleAppender不适合在Web应用程序中使用。 OutputDebugStringAppender会在调试窗口中显示消息。您可能还想查看AspNetTraceAppender

答案 2 :(得分:1)

您可以尝试将特定的NHibernate记录器与log4net appender相关联。

如果要记录所有生成的sql,请尝试将其添加到log4net配置部分:

<logger name="NHibernate.SQL" additivity="false">
  <level value="DEBUG" />
  <appender-ref ref="ConsoleAppender" />
</logger>

如果出于某种原因,您只想记录Select语句和诊断信息,可以使用NHibernate.Loader.Loader,如下所示:

<logger name="NHibernate.Loader.Loader" additivity="false">
  <level value="INFO" />
  <appender-ref ref="ConsoleAppender" />
</logger>