nhibernate 3.2日志sql查询

时间:2011-11-09 20:51:26

标签: sql nhibernate logging

我发现了一些关于在使用NHibernate 3.x时记录sql查询时遇到的困难的帖子 实际上我正在使用NHibernate 3.2,我无法让sql日志记录工作。 我只需要在测试或调试时在输出窗口中编写的简单日志记录功能。 它曾经在NH 2.2中工作,但是这个新版本出了问题。 正如this article所说,我只是用

配置了NHibernate
<property name="show_sql">true</property>

我有这个简单的代码:

using (var session = PersistenceManager.Istance.GetSession()) {
    var result = (from agenzia in session.Query<Agenzia>()
                 select agenzia).ToList();
    return result;    
}

但似乎没有从数据库中检索到任何内容。所以我不知道是否记录了任何内容(我在visual studio 2010下进行调试,所以我希望在输出窗口中看到一些内容),或者由于一些奇怪的原因,甚至没有任何内容被执行。 在任何地方都不例外,所以我有点困惑

编辑: 根据要求,这是NHibernate的完整配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<!-- NHibernate Configuration -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory name="NHibernate.xlns">
    <property name="dialect">
      NHibernate.Dialect.MsSql2000Dialect
    </property>
    <property name="connection.driver_class">
      NHibernate.Driver.SqlClientDriver
    </property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

2 个答案:

答案 0 :(得分:1)

标志show_sql,AFAIK登录 STDOUT ,因此它在单元测试或控制台应用程序中运行良好,但如果你的应用程序没有stdout(即winapp或web应用程序),它什么都不做在这种情况下,您应该在log4net配置中启用日志NHibernate.SQL(或者在您可能使用的备用记录器中)。在Web应用程序中,您可以配置跟踪追加程序,以便在调试程序的跟踪窗口中查看已记录的查询。

答案 1 :(得分:0)

如果您使用的是log4net,那么要启用SQL日志记录,除了设置<property name="show_sql">true</property>之外,还需要将级别设置为INFO或DEBUG(详细),如下所示:

  <log4net>
    ...
    <!-- Print only messages of level INFO or above in 'NHibernate' package  -->
    <logger name="NHibernate">
      <level value="INFO" />
    </logger>
  </log4net>