Log4Net没有写入数据库

我检查了连接字符串(我从服务器资源管理器中获取)。

我在log4net config中检查了commandText。

我已经检查了数据库权限(集成安全性很好,并且在log4net类之外工作)。

我已经检查了存储库的配置属性(它已配置,它找到配置文件正常)。

我还检查了配置文件中定义的字段是否与数据库中表的属性(字段大小等)匹配。

有任何想法吗?

当我正在调试它似乎在所有正确的时间点击所有正确的方法,没有例外提出。

      <!---->                      ...more parameters                  

它写的都不是appender。

好吧,经过几个小时的拔毛 – 我已经破了。

这一行:

 log4net.Config.XmlConfigurator.Configure(); 

在任何日志记录之前需要放入(好吧,尽早在应用程序中)。 而已。 这就是全部。 这是其中一个问题,我很放心,但同时感到沮丧。

我建议打开Log4Net调试:

  

如果在幕后发生错误,这可能会指向正确的方向。 输出将定向到IDE或命令行中的控制台输出。

  1. 检查log4net.dll是否与应用程序位于同一文件夹中。
  2. 尝试启用log4net自我记录,也许它有助于找出:

                

根据ADONetAppender配置示例:

  

这使用ADO.NET参数化查询格式,因此您需要使用该语法。 此外,您可能不希望为数据库连接使用集成安全性(例如,如果您正在运行网站或服务)。 对于您的文件追加器,我建议使用完全限定的路径,并确保它可由记录器写入。

我假设您已经在指定的数据库中创建了表?

注意我建议也在调试模式下设置跟踪追加器 ,以确保您实际记录的是东西。

我昨天遇到了类似的问题,Log4Net只是没有写入数据库。 我从另一个成功将日志写入数据库的现有appender复制了配置。 我的解决方案是运行SQL Server Profiler来尝试捕获正在发生的事情。 Profiler显示INSERT语句是由Log4Net发送的,但它在SQL Server端失败了。 在SQL Server Management Studio中手动运行INSERT语句向我展示了它的确切错误,在我的例子中,它将NULL插入到不接受NULL的列中。

在AssemblyInfo.cs文件中添加此行

 [assembly: log4net.Config.XmlConfigurator(Watch = true)] 

正如官方配置手册所述“可以使用汇编级属性配置log4net配置而不是以编程方式指定”,我发现这是一种更清晰的方法。 有些人可能会觉得我的答案更简单。

资料来源: https : //logging.apache.org/log4net/release/manual/configuration.html