禁用 NHibernate 日志记录。

53

我有一个空的app.config文件,但我仍然会得到NHibernate的调试日志。

NHibernate: SELECT this_.LogID as LogID71_0_, this_.Level as Level71_0_, this_.Message as Message71_0_, this_.EventTime as EventTime71_0_, this_.Component as ...

我尝试添加一个ERROR日志级别的log4net配置,但是没有用。我该如何停止这些日志信息的出现?

让我困惑的是,如果一开始我的app.config是空的,为什么这些信息还会出现。我认为,我不需要配置它以防止打印这些消息 - 默认应该是关闭的。难道我的代码以某种程序方式设置了它们吗?我应该寻找什么?


正如我们所看到的,真正的答案是log4net的配置。 - Johnny_D
1
实际上,这是nHibernate中的showsql.... - Dani
7个回答

86

配置Log4Net以与NHibernate一起使用 可能会有所帮助。

您需要同时拥有这两个日志记录器:

 <logger name="NHibernate">
   <level value="ERROR" />
 </logger>

 <logger name="NHibernate.SQL">
   <level value="ERROR" />
 </logger>

2
不起作用,请参见更新的问题(我添加了适当的log4net配置部分,但没有效果)。 - ripper234
3
log4net 实际上是匹配以指定名称开头的记录器名称,因此将 "NHibernate" 放入其中将过滤掉所有 NHibernate 的消息。 - Marc Climent
我认为@Ripper的评论是不正确的,这对我来说可以工作,并且也适用于ActiveRecord。 - Chris S
1
@ChrisS - 我的评论并不是错误的。这个答案对99%的人有效,但在我的情况下没有帮助。请参见https://dev59.com/UnM_5IYBdhLWcg3wPAdF#1488105 - ripper234
在某些情况下,您可能需要将additivity属性设置为false才能获得预期的结果,例如: - Shorstok

14
return Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2005.ConnectionString(
                c => c.FromConnectionStringWithKey("MyDB")).ShowSql())

我移除了 .ShowSql(),这对我起了作用。


但是如果我想查看SQL,但不想在控制台中查看呢? - Johnny_D

6

问题出现在我的代码中。我们手动构建了NHibernate配置(将show_sql标志设置为true)。


4

NHibernate的日志对我帮助不大... 我更喜欢这些设置:

    <logger name="NHibernate">
      <level value="OFF" />
    </logger>

    <logger name="NHibernate.SQL">
      <level value="OFF" />
    </logger>

2

您想在NHibernate级别还是Log4Net级别禁用日志记录?

我通过将“show_sql”变量设置为false来执行前者。我现在正在使用C#以编程方式执行此操作,但我认为这也可以轻松地放入XML配置文件中。


无法工作(http://www.beansoftware.com/asp.net-tutorials/nhibernate-log4net.aspx)。为什么默认显示SQL?我的代码是否以某种方式启用了它? - ripper234
刚刚去检查了我的代码。我通过注释掉 show_sql = true 来关闭了它。没关系,对不起。 - Jon Seigel

2

对我来说,问题出在NUnit上。当在TeamCity中运行测试时,额外的日志记录发生了变化,这可能是因为使用了不同版本的nunit。


0

你正在使用 NUnit 2.4.6 吗?我昨天读到了this篇博客文章,说这个版本的 NUnit 将 log4net 设置为 DEBUG 级别日志记录,影响了 NHibernate。

如果不是 NUnit,也不是你的问题,那么我建议检查一下是否是其他第三方库的问题。

编辑

仔细想了想,我认为输出结果与 log4net 没有关系。格式更像是 "show_sql" 控制的输出。我建议检查两件事情: 1. 是否将正确的(show_sql=false 的)hibernate.config 文件复制到执行目录中。 2. 是否在代码中手动覆盖了 show_sql 配置属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接