【问题标题】:How to get NHibernate to logging a file, not the console?如何让 NHibernate 记录文件,而不是控制台?
【发布时间】:2015-04-28 16:50:55
【问题描述】:
如果我打开show_sql,那么NHibernate 会记录它的查询,这正是我想要看到的。但是,我的应用程序是一个控制台程序,打开 show_sql 无论如何都会导致 SQL 出现在控制台中。我不想在控制台中看到它,而只想在文件中看到它。
注意:我使用 log4net 来控制日志记录。
对于此问题的任何建议或指导表示赞赏。
【问题讨论】:
标签:
c#
nhibernate
fluent-nhibernate
log4net
【解决方案1】:
我们可以使用 log4net 和它的一些 appender(即像 RollingFileAppender 这样的文件 appender) 来跟踪 NHibernate(包括生成的 SQL)
有一个详细的方法:
Configure Log4Net for use with NHibernate
<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>
注意:这里,我们没有使用配置设置<property name="show_sql">false</property>。我们只是用 log4net 跟踪