【问题标题】:How to log SQL calls with NHibernate to the console of Visual Studio?如何使用 NHibernate 将 SQL 调用记录到 Visual Studio 的控制台?
【发布时间】:2009-01-23 21:32:10
【问题描述】:

我有以下NHibernate的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.connection_string">Server=.\SQLEXPRESS;Database=mydb;Integrated Security=True;</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.release_mode">auto</property>
    <property name="adonet.batch_size">500</property>

    <property name="show_sql">true</property>

  </session-factory>
</hibernate-configuration>

但是 SQL 没有显示在 Visual Studio 的输出窗口中。是否必须安装log4net?还是应该 show_sql 单独工作?

【问题讨论】:

    标签: visual-studio nhibernate logging log4net


    【解决方案1】:

    要在 Visual Studio 的输出窗口中显示 SQL,请将 log4net 配置为在 log4net 配置中使用 TraceAppender。这个:

    <appender name="DebugSQL" type="log4net.Appender.TraceAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
    

    然后这个:

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

    编辑:我似乎无法在这里正确格式化。 See this link for code example

    【讨论】:

    • 它似乎不支持 .NET 4.0 的 VS2010
    • @Alex 它适用于 VS2010 和 .NET4 对我来说,也许你忘了调用 log4net.Config.XmlConfigurator.Configure();在您的 Application_Start 中? (或者也许它已经被修复了)
    • 为什么这不是公认的答案?我认为问题的所有者不是在搜索付费产品!真正的男人,SO 正变得越来越被试图销售其产品的软件公司所污染!住手!
    • 我可以在单元测试中使用它吗?
    【解决方案2】:

    对于那些更喜欢代码而不是配置的人,以下 sn-p 将使用简单的控制台附加程序创建适当的 NH 记录器。

    var hierarchy = (Hierarchy) LogManager.GetRepository();
    var logger = (Logger) hierarchy.GetLogger("NHibernate.SQL");
    logger.AddAppender(new ConsoleAppender {Layout = new SimpleLayout()});
    hierarchy.Configured = true;
    

    【讨论】:

    • 我必须使用 TraceAppender 而不是 ConsoleAppender 才能在 Visual Studio 输出窗口中看到这一点。
    • 你还必须添加logger.Level = Level.Debug
    【解决方案3】:

    show_sql 输出到 Console.Out - 在运行集成测试时最有用

    【讨论】:

    • 是不是意味着在VS中看不到呢?这是否意味着我必须安装 log4net?
    • TestDriven.NET 将 Console.Out 发送到 VS 中的输出窗口。这就是我使用 show_sql 的方式
    • 如果你在 NUnit 下运行它,它会显示在 NUnit 的文本输出选项卡中。如果您在普通的旧应用程序中运行它,我认为它应该显示在控制台窗口中。它去哪里 Console.Out 去哪里。你不需要对 log4net 做任何事情。
    【解决方案4】:

    您可以使用一种叫做 NHibernate 分析器的东西。

    http://nhprof.com/

    它很贵,但它可以工作,并且有 30 天的试用期。

    【讨论】:

      【解决方案5】:

      从 NHibernate 3.0 开始你可以使用 loquacious 配置

      configuration.DataBaseIntegration(x =>
      {
        x.LogSqlInConsole = true;
        x.LogFormattedSql = true;
      });
      

      其他信息可在http://fabiomaulo.blogspot.com.ar/2009/07/nhibernate-configuration-through.html获取

      【讨论】:

      • 什么是配置?不在 NHibernate 3.3.0.4000
      猜你喜欢
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      相关资源
      最近更新 更多