Log4Net没有写入数据库

10 c# database sql-server logging log4net

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

我在log4net config中检查了commandText.

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

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

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

有任何想法吗?

当我正在调试它似乎在所有正确的时间点击所有正确的方法,没有异常提出.

<log4net>

  <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
    <bufferSize value="1" />
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="" />
    <commandText value="INSERT INTO dbo.Log4Net ([Date],[Thread],[Level],[Logger],[Message]) VALUES ('01-01-2001', 'test', 'test', 'test', 'test')"/>
    <!--<commandText value="INSERT INTO dbo.Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception],[MachineName],[CultureId],[SourcePage],[Details],[Method]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @MachineName, @CultureId, @SourcePage, @Details, @Method)" />-->
    <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>

...more parameters

    <securitycontext type="log4net.Util.WindowsSecurityContext">
      <credentials value="Process">
      </credentials>
    </securitycontext>
  </appender>

  <appender name="FileAppender" type="log4net.Appender.FileAppender">
    <param name="File" value="LogTest.txt"/>
    <param name="AppendToFile" value="true"/>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-2p %c [%x] - %m%n"/>
    </layout>
  </appender>

  <root>
    <appender-ref ref="ADONetAppender"/>
    <appender-ref ref="FileAppender"/>
  </root>

</log4net>
Run Code Online (Sandbox Code Playgroud)

它写的都不是appender.

小智 19

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

这一行:

log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)

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


bea*_*ous 11

我建议打开Log4Net调试:

<add key="log4net.Internal.Debug" value="true"/>
Run Code Online (Sandbox Code Playgroud)

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


小智 10

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

    <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>
    
    Run Code Online (Sandbox Code Playgroud)