Log4net не может записать базу данных с использованием C # - PullRequest
0 голосов
/ 11 мая 2019

Я уже пробовал это и нашел много похожих вопросов, но я не вижу данных на моем 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 # Create в журнал:

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, когда я запускаю событие 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

1 Ответ

0 голосов
/ 12 мая 2019

Вы не видите никаких журналов (включая 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>
...