1

我正在尝试使用以下配置将 NHibernate 的 sql 重定向到一个单独的文件,但没有成功。一切(带有 SQL 查询)都进入主文件。有人可以帮忙吗?

 <log4net>
    <appender name="DebugSQL" type="log4net.Appender.FileAppender">
      <param name="File" value="nhsql.log"/>
      <param name="AppendToFile" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
          value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <appender name="Main" type="log4net.Appender.FileAppender">
      <param name="File" value="nh.log"/>
      <param name="AppendToFile" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
          value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    <logger name="NHibernate.SQL">
      <level value="ALL" />
      <appender-ref ref="DebugSQL" />
    </logger>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="Main" />
    </root>

  </log4net>
4

3 回答 3

2

默认情况下,记录器继承其祖先中的所有附加程序。因此记录器NHibernate.SQL还将记录到根记录器中的所有附加程序。additivity您可以使用以下属性来防止这种情况:

<logger name="NHibernate.SQL" additivity="false" >
...
</logger>
于 2012-11-11T01:19:59.077 回答
0

看起来只有初始 SQL 语句(创建表等)没有记录到单独的文件中。其他的都是。所以我想它必须是这样的,这个配置是可以的。感谢大家的帮助。

于 2013-08-18T08:39:37.417 回答
0

除了将 SQL 发送到单独的文件之外,该根配置还将把所有内容发送到 Main appender。如果要防止 SQL 出现在主日志文件中,则需要在 log4net 手册中搜索“过滤器”:http: //logging.apache.org/log4net/release/manual/configuration.html那些应该进入主附加程序的配置。

于 2012-11-11T01:07:38.137 回答