如何让NHibernate记录文件,而不是控制台?

时间:2015-04-28 16:50:55

标签: c# nhibernate fluent-nhibernate log4net

如果我打开function TServerMethods1.UTF8TEST(Value: string): string; var metaData: TDSInvocationMetadata; output: String; begin metaData:= GetInvocationMetadata; output:= '<element><inside name="skúška" /></element>'; metaData.ResponseCode:= 200; metaData.ResponseContentType:= 'text/xml; charset=utf-8'; metaData.ResponseContent:= utf8encode(output); end; ,则show_sql会记录其查询,这是我想要查看的内容。但是,我的应用程序是一个控制台程序,打开NHibernate会导致SQL出现在控制台中,无论如何。我不想在控制台中看到它,只在文件中看到它。

注意:我使用log4net来控制日志记录。

对此问题的任何建议或指导表示赞赏。

1 个答案:

答案 0 :(得分:0)

我们可以使用log4net及其一些appender (即文件appender,如hello + $this->session->userdata('user')来跟踪NHibernate (包括生成的SQL)

详细介绍了如何:

Configure Log4Net for use with NHibernate

RollingFileAppender

然后声明记录器

<log4net>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="c:\Logs\myLog.log" />
    <layout type="log4net.Layout.PatternLayout">
      <ConversionPattern value="[%-3d|%-4t|%-5p|%-75c] %m | %-10u %n" />
    </layout>
    <appendToFile value="true" />
    <maximumFileSize value="1MB" />
    <staticLogFileName value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="2" />
  </appender>
...

注意:这里,我们没有使用配置设置<logger name="NHibernate"> <level value="WARN" /> <appender-ref ref="RollingFileAppender" /> </logger> <logger name="NHibernate.SQL"> <level value="DEBUG" /> <appender-ref ref="RollingFileAppender" /> </logger> 。我们只跟踪log4net