使用 log4net 和 NHibernate 将日志信息保存在数据库中

Save Log Information in Database with log4net and NHibernate

我遵循了 this 教程并且能够让这两个项目与我的 sql server 2012 实例一起工作:

但是,当我在 my 解决方案中包含 HLogger 项目时(而不是将其与上面的示例项目一起使用),它确实工作。

以下是一个代码片段,当 运行 来自提供的示例项目时,它对我有用;然而,当我将这个库添加到我自己的解决方案中时,它并没有起作用。

    ILog log = log4net.LogManager.GetLogger("NHibernateLogging");
    log.Error("Error!", new Exception("Exception123"));
    log.Warn("Warning");    

什么都没发生。什么都没扔。数据库未填充。我使用的 hibernate.cfg.xml 文件与提供的文件相同(并与 "sample project" 结合使用):

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">
      NHibernate.Connection.DriverConnectionProvider
    </property>
    <property name="connection.driver_class">
      NHibernate.Driver.SqlClientDriver
    </property>
    <property name="connection.connection_string">
      Server=------.net;database=mydb;user id=myuser;password=sdofjosidfjoijsf;persist security info=true;
    </property>
    <property name="dialect">
      NHibernate.Dialect.MsSql2000Dialect
    </property>
    <property name="show_sql">
      true
    </property>
    <property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
  </session-factory>
</hibernate-configuration>

更改是 app.config 文件。曾经是:

<section name="log4net"
  type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.0" />

现在是:

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

原因是我不能在同一个解决方案中有多个版本的 log4net,而且我无法选择我当前的 log4net 版本,因为它能够记录 masstransit 的第 2 版msmq.

codeproject 站点中的项目是为 .NET 3.5 创建的,而我的解决方案是 .net 4.5。

如何诊断无法在数据库中使用 log4net 记录任何内容的原因?

你可以开始,

  1. 看看问题是否出在 Log4Net 上,尝试为相同的配置添加一个 FileAppender,看看是否有效

  2. 如果 log4net 工作,那么下一步是检查 Appender 配置,特别是仔细检查 类 的命名空间/程序集名称