如何使用NHibernate将SQL调用记录到Visual Studio的控制台?

Nic*_*hac 39 nhibernate logging log4net visual-studio

我有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>
Run Code Online (Sandbox Code Playgroud)

但SQL不会显示在Visual Studio的输出窗口中.是否必须安装log4net?或者应该show_sql独自工作?

Lor*_*its 57

要在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>
Run Code Online (Sandbox Code Playgroud)

然后这个:

<logger name="NHibernate.SQL" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="DebugSQL" />
</logger>
Run Code Online (Sandbox Code Playgroud)

编辑:我似乎无法正确格式化这里.有关代码示例,请参阅此链接

  • 为什么这不是公认的答案?我不认为问题的主人正在搜索付费产品!真正的男人,因为软件公司试图销售他们的产品而受到越来越多的污染!停下来! (3认同)
  • 它似乎不支持VS2010与.NET 4.0 (2认同)

Nat*_*lch 17

对于那些喜欢代码而不是配置的人,以下代码片段将使用简单的控制台appender创建相应的NH记录器.

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

  • 我不得不使用TraceAppender而不是ConsoleAppender在Visual Studio输出窗口中看到这一点. (4认同)

Mat*_*nze 8

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


Fab*_*ulo 6

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

configuration.DataBaseIntegration(x =>
{
  x.LogSqlInConsole = true;
  x.LogFormattedSql = true;
});
Run Code Online (Sandbox Code Playgroud)

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