Castle ActiveRecord:查看SQL的最简单方法是什么?

时间:2011-07-11 17:52:09

标签: nhibernate castle-activerecord

我正在尝试让Castle ActiveRecord向我展示它生成的SQL。我在此发现的各种博客提供了两种选择:

(1)使用NHibernate“show_sql”设置。麻烦的是,我正在使用程序化配置,就像这样。

var config = XmlConfigurationSource.Build(
    DatabaseType.MsSqlServer2008, Settings.Default.StationManagerDbConnectionString);
config.IsRunningInWebApp = isRunningInWebApp;
config.PluralizeTableNames = true;
var modelAssembly = Assembly.GetAssembly(typeof(OneOfMyClasses));
ActiveRecordStarter.Initialize(modelAssembly, config);

使用编程配置,似乎没有办法指定“show_sql”。

(2)使用log4net 。但是除了令人痛苦的log4net工作之外,我还没有办法让只是 SQL。我得到了大量的调试数据,其中SQL语句只是其中的一小部分。

那么:有没有什么方法可以保留我的Castle ActiveRecord的编程配置,还能让NHibernate只输出SQL?

编辑:这是我使用log4net的原因。但是在我的Web应用程序的前两页中,这会在Debug窗口中吐出超过14,000行。如何更改此代码以仅获取SQL?

var appender = new log4net.Appender.DebugAppender
{
    Layout = new log4net.Layout.SimpleLayout(),
    Name = "NHibernate.SQL",
    Threshold = log4net.Core.Level.Debug
};
log4net.Config.BasicConfigurator.Configure(appender);

2 个答案:

答案 0 :(得分:1)

您应该能够通过使用 NHibernate.SQL 记录器来分离出SQL。

示例配置:

<log4net>
<!-- This is a default logger that nhibernate uses to push out all the SQL statements to-->
<logger name="NHibernate.SQL" additivity="false">
  <level value="DEBUG"/>
  <appender-ref ref="NHibernateSQLLog"/>
</logger>

<!-- This is a default logger that nhibernate uses to push out all the debugging type information to-->
<logger name="NHibernate" additivity="false">
  <level value="DEBUG"/>
  <appender-ref ref="NHibernateFileLog"/>
</logger>

<appender name="NHibernateFileLog" type="log4net.Appender.RollingFileAppender">
  <file value="Logs/nhibernate.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
  </layout>
</appender>

<appender name="NHibernateSQLLog" type="log4net.Appender.RollingFileAppender">
  <file value="Logs/nhibernate_sql.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
  </layout>
 </appender>
 </log4net>

修改:

var filter = new log4net.Filter.LoggerMatchFilter();
filter.LoggerToMatch = "NHibernate.SQL";
filter.AcceptOnMatch = true;

var filterDeny = new log4net.Filter.DenyAllFilter();

var appender = new log4net.Appender.DebugAppender
{
    Layout = new log4net.Layout.SimpleLayout(),
    Name = "NHibernate.SQL",
    Threshold = log4net.Core.Level.Debug
};

appender.AddFilter(filter);
appender.AddFilter(filterDeny);
log4net.Config.BasicConfigurator.Configure(appender);

答案 1 :(得分:0)

该任务的最佳工具是NHibernate Profiler(http://nhprof.com/)。 这是一个商业应用程序,但你可以免费试用30天。