Log4Net属性始终为false(可能未初始化)

时间:2016-10-07 18:29:49

标签: c# log4net

我一直在使用Log4Net登录数据库,看起来很简单,但是当我调试它时,我发现所有的记录模式仍然是假的。

我已尝试实施hereherehere的解决方案,但这些解决方案都不适用于我。

所有人都说基本相同的事情......要么我需要

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "filepath", Watch = true)]

在我的AsseblyInfo.cs或我可以使用

log4net.Config.XmlConfigurator.Configure(new FileInfo("filepath"));

在致电log4net.LogManager.GetLoggers()

之前

我已尝试过这两种方法,将它们移到各个地方,将它们放入启动项目中,将它们放入Application_Start()但没有任何影响。

这是我的log4net.config文件

<?xml version="1.0" encoding="utf-8" ?>
<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:\Projects\log4net.txt" />
      </listeners>
    </trace>
  </system.diagnostics>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="ADOAppender" />
      <appender-ref ref="FileAppender" />
    </root>
    <appender name="FileAppender" type="log4net.Appender.ConsoleAppender">
      <file value="C:\Projects\Log.txt"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{ABSOLUTE} [%thread] %level - %message%newline%exception"/>
      </layout>
    </appender>
    <appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data"/>
      <connectionString value="XXXXXXX"/>
      <commandText value="dbo.sp_CreateErrorLog" />
      <commandType value="StoredProcedure" />
      <parameter>
        <parameterName value="@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="@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="@User" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{log4net:HostName}" />
        </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>

我的班级代码:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "../log4net.config", Watch = true)]

namespace ...
{
    public class LogService : ILogService
    {

        private readonly log4net.ILog _log;

        public LogService()
        {
            log4net.Config.XmlConfigurator.Configure(new FileInfo("../log4net.config"));
            _log = log4net.LogManager.GetLogger
        (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        }

    //more stuff
    }
}

有人能看到我失踪的东西吗?我很难过。

1 个答案:

答案 0 :(得分:0)

我的特定程序表现得如此奇怪的原因是因为我使用API​​来调用使用log4net的日志服务。

我只需将log4net.config文件移动到API的根目录,然后使用

调用它
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

这是因为Log4Net在初始调用的根目录中查找,在我的情况下,该目录与我实施 Log4Net的目录不同。