【问题标题】:Fluent NHibernate and log4net流畅的 NHibernate 和 log4net
【发布时间】:2012-02-01 11:44:07
【问题描述】:

虽然有很多关于这个主题的问题和答案,但我无法找到我的问题的答案。我已经为 NHibernate 配置了 log4net,如下所述:http://nhibernate.hibernatingrhinos.com/19/how-to-configure-log4net-for-use-with-nhibernate

唯一的区别是我将 log4net 配置为与跟踪附加程序一起使用:

<appender name="trace" type="log4net.Appender.TraceAppender, log4net">
    <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d %p %m%n" />
    </layout>
</appender>
....
    <logger name="NHibernate" additivity="false">
        <level value="ALL"/>
        <appender-ref ref="trace"/>
    </logger>
    <logger name="NHibernate.SQL" additivity="false">
        <level value="ALL"/>
        <appender-ref ref="trace"/>
    </logger>

然后,我得到了我的 NHibernate 日志记录。但是,我没有看到任何生成的 SQL 查询,这是我希望看到的。我确实记录了有关打开和关闭会话、提交事务等的日志。但是查询中没有任何内容发送到数据库。有谁知道我忽略了什么?

我正在使用 Fluent NHibernate 1.2,它使用 NHibernate 3.1。我在配置中启用了ShowSql()

【问题讨论】:

  • 尝试从 Fluent NHibernate 配置中删除 ShowSql() 调用。
  • @Pieter - 当您启用 ShowSql() 时,您至少在 VS 输出窗口中看到它吗?这对我来说适用于 FNH 1.0。应该可以让您看到生成的 SQL - 当然它不会被保存。
  • 启用 ShowSql() 后,查询不会显示在 VS 输出窗口中。删除 ShowSql() 仍然不会显示在 log4net 日志记录中。
  • 更正:我已删除 ShowSql(),现在日志记录似乎工作正常。

标签: nhibernate fluent-nhibernate log4net


【解决方案1】:

尝试在流畅的 NH 配置中将 AdoNetBatchSize 设置为零:

Fluently
  .Configure()
  .Database(...) 
  .AdoNetBatchSize(0) 

【讨论】:

  • 不幸的是,这并没有改变这种情况。日志输出中仍然没有查询。
【解决方案2】:

尝试从两个附加程序中删除 additivity="false"。要么为NHibernate.SQL 使用不同的附加程序。在这种情况下,将它们都设置为 false 并没有什么意义。

如果您想将 sql 查询与常规的 nhibernate 日志记录分开,那么这确实有意义如果您使用的是不同的附加程序。

http://logging.apache.org/log4net/release/sdk/log4net.Repository.Hierarchy.Logger.Additivity.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多