nHibernate在单元测试期间输出sql日志记录

时间:2009-04-17 14:52:20

标签: unit-testing nhibernate logging

我正在针对nHibernate应用程序从VS2008内部运行单元测试,并希望在单元测试期间打开日志记录,这样我就可以看到更多的内容。我已经复制并粘贴了另一个应用程序的app.config,它成功地将nhibernate信息记录到单元测试app.config中,但仍然没有得到任何输出。

这是测试项目的app.config:

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

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

    <!-- levels: DEBUG, INFO, WARN, ERROR, FATAL -->

    <root>
      <level value="DEBUG"/>
      <appender-ref ref="GeneralLog" />
    </root>

    <logger name="NHibernate" additivity="false">
      <level value="DEBUG"/>
      <appender-ref ref="NHibernateFileLog"/>
    </logger>
    <logger name="Pushable.Data" additivity="false">
      <level value="DEBUG"/>
      <appender-ref ref="DataLog"/>
    </logger>
</log4net>

当我运行测试项目时,没有从log4net创建任何输出。运行log4net的应用程序必须是Web或Windows而不是测试应用程序吗?

4 个答案:

答案 0 :(得分:5)

在Test初始化程序中,需要进行调用:

log4net.Config.XmlConfigurator.Configure();

这样可以很好地记录日志。

答案 1 :(得分:1)

如果您只想查看所有已触发的sql语句,请在Nhiberante配置部分中将show_sql属性设置为true,

例如

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<property name="show_sql">true</property>
</hibernate-configuration>

答案 2 :(得分:1)

在DEBUG中使用log4net将为您提供所有NHibernate必须告诉的内容。

如果您只想查看SQL输出

,那么

show_sql是一个很好的选择

Configure Log4Net for use with NHibernate

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- Others sections -->
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>

<!-- Some others configurations -->

<!-- This section contains the log4net configuration settings -->
<log4net debug="false">

<appender name="console"
type="log4net.Appender.ConsoleAppender, log4net">
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>

<!-- Setup the root category, add the appenders and set the default priority -->
<root>
<priority value="DEBUG" />
<appender-ref ref="console" />
</root>

</log4net>
</configuration>

答案 3 :(得分:0)

如果您的代码是在生产中登录而不是在测试中,请查看测试目录。测试在“testresults”的子目录中运行,该子目录是为每个testrun创建的。您的配置文件当然不存在。

需要声明需要安装到测试目录的所有内容。使用它将[DeploymentItem(“myfile”)]添加到testclass或转到Test - &gt;编辑测试运行配置 - &gt;本地测试运行。然后转到“部署”并添加配置文件。