Log4net 无法使用 C# 写入数据库

Log4net cannot Write database using C#

我已经试过了,发现了很多类似的问题,但是我的SQL上看不到一个数据。

这是我的 app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
  <log4net>
    <root>
      <level value="ALL"></level>
      <appender-ref ref="AdoNetAppender"></appender-ref>
    </root>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="data source=.;initial catalog=dblog;integrated security=false;persist security info=True;User ID=bernie4;Password=GoodSQL" />
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>   
  </log4net>
</configuration>

这是另一个代码,我尝试添加到我的 app.config 代码轨道,但我查看我的 C 驱动器或其他位置没有找到 log4net.txt 或数据。

<configuration>
...
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>

...

    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add 
                    name="textWriterTraceListener" 
                    type="System.Diagnostics.TextWriterTraceListener" 
                    initializeData="C:\tmp\log4net.txt" />
            </listeners>
        </trace>
    </system.diagnostics>
</configuration>

以下是我如何使用 C# 创建日志:

using System;
using System.Windows.Forms;
using log4net;
using System.Reflection;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        log4net.ILog log;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            log4net.Config.XmlConfigurator.Configure();
            log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            log.Info("your data has been successfully saved.");
        }
    }
}

如果这些代码成功运行,我可以看到它在我的 SQL 上显示字符串是 "your data has been successfully saved",当我触发 button1_Click 事件时,但数据库没有显示任何内容。

我看到很多人有类似的问题,我试过编辑我的代码,但还是没用。

1.bufferSize value="1"
2.log4net.Config.XmlConfigurator.Configure();
3.name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"

最后,这是我的软件和dll版本:

C#          :2017
log4net.dll :2.0.8.0 -Net 4.5
SQL         :2017

您没有看到任何日志记录(包括没有 Log4net 调试日志记录),因为您的 App.config 文件未加载,因为它无效;
<configSections> 元素必须是 <configuration>.

下的第一个子元素

有了它,您至少会看到内部 log4net 调试日志记录。
如果 AdoNetAppender 配置正确,数据库日志也会出现;如果没有,可以参考调试日志。

您的 App.config 应如下所示。

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

    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>

    <appSettings>
        <add key="log4net.Internal.Debug" value="true" />
    </appSettings>

    <log4net>
        <!-- Your log4net configuration goes here -->
    </log4net>

    <system.diagnostics>        
        <trace autoflush="true">
            <listeners>
                <add
                    name="textWriterTraceListener"
                    type="System.Diagnostics.TextWriterTraceListener"
                    initializeData="c:\tmp\log4net.txt" />
            </listeners>
        </trace>
    </system.diagnostics>

</configuration>