0

这让我发疯......我花了半天时间试图扭转一切,但我无法让 log4net 吐出任何关于 NHibernate 的信息。

这是我当前的 Fluent NHibernate 配置:

var configuration = Fluently.Configure()
    .Database(SQLiteConfiguration.Standard.UsingFile(AppConstants.PATH_FILENAME_DB))
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<...>())
    [...Mappings...]
    .Diagnostics(x => x.Enable());

我的 app.config:

<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>

<log4net>
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <param name="File" value="data/log/unprocessed.log"/>
    <param name="AppendToFile" value="true"/>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
    </layout>
  </appender>

  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
    </layout>
  </appender>

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

  <root>
    <level value="INFO"/>
    <appender-ref ref="LogFileAppender"/>
  </root>
</log4net>

我可以在初始化主表单后立即记录内容:

log4net.Config.XmlConfigurator.Configure();
logger.Info("Here is a debug log!!");

它100%有效。但是我无法从 Nhibernate 中得到任何东西。

我试过了:

  • 在我的 Fluent NHibernate 配置中设置 ShowSql() => SQL 出现在 VS 控制台中。
  • 添加 NHibernate 记录器
  • 去除可加性
  • 使用 ConsoleAppender 而不是 LogFileAppender (尽管我从应用程序获取常规日志,但输出中仍然没有 SQL)
  • 重新编译 Fluent NHibernate,尝试了 3 个不同版本的 log4net ...

我的 Fluent Nhibernate 映射很好,我的应用程序在没有 log4net 的情况下也能完美运行。

我仍然无法记录来自 NHibernate 的任何查询...不知道发生了什么,但如果您有任何线索,我会很乐意尝试!!!

谢谢!

4

1 回答 1

2

好吧,我最终找到了问题...

我所有的 DLL 都位于 /lib 文件夹而不是输出文件夹中。

我的 app.config 的一部分有这个:

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="lib"/>
    <dependentAssembly>
      <assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089"/>
      <bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

将 log4net.dll 放在我的输出文件夹中解决了这个问题。

于 2012-05-25T07:41:08.767 回答