Log4Net配置 - 未创建系统日志文件

时间:2015-10-22 11:28:34

标签: asp.net log4net

在记录错误时,我无法通过log4net创建日志文件。

我使用ninject为与log4net相关的对象注入依赖项,因为我创建了一个包装器: -

public interface ILogManager
{
   ILog GetLog(Type typeAssociatedWithRequestLog);
}

public class LogManagerAdapter : ILogManager
{
   public ILog GetLog(Type typeAssociatedWithRequestLog)
   {
      var log = LogManager.GetLogger(typeAssociatedWithRequestLog);

      return log;
   }
}

在NinjectConfigurator.cs中: -

 private void ConfigureLog4net(IKernel container)
 {
     XmlConfigurator.Configure();

     var logManager = new LogManagerAdapter();

     container.Bind<ILogManager>().ToConstant(logManager);
 }

 private void AddBindings(IKernel container)
 {
     ConfigureLog4net(container);
 }

在我的webconfig中,我有以下内容: -

<configSections>
    <section name ="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="..\\..\\logs\\WebApi2Book.Api.Log"/>
      <appendToFile value="true"/>
      <maxSizeRollBackups value="-1"/>
      <countDirection value="1"/>
      <maximumFileSize value="5MB"/>
      <rollingStyle value="Composite"/>
      <preserveLogFileNameExtension value="true"/>
      <staticLogFileName value="false"/>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level [%thread] %logger - %message%newline%exception"/>
      </layout>
      <logger name="NHibernate">
        <level value="ERROR"/>
      </logger>
      <logger name="NHibernate.SQL">
        <level value="ERROR"/>
      </logger>
      <root>
        <level value="ALL"/>
        <appender-ref ref="LogFileAppender"/>
      </root>
    </appender>
  </log4net>

在Global.asax类中,Im测试记录器实际上是正确注入的,然后测试在Application_Start()方法中记录错误。

protected void Application_Start()
        {
            var log = WebContainerManager.Get<ILogManager>().GetLog(typeof(WebApiApplication));

            log.Error("Yey!!!!  works!");
            log.Debug("Yey!!!!  works!! Debug");


        }

我在调试程序时无法发现任何问题,我已检查 IsDebugEnabled 是否设置为TRUE,并且记录器按预期正确注入。

唯一的问题是没有生成日志文件。

1 个答案:

答案 0 :(得分:1)

你的问题是你的根记录器中你引用了一个名为“LogFileAppender”的appender,但事实上你的appender被称为“RollingFileAppender” - 这两个地方的appender名称必须相同:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  …
<root>
  <level value="ALL"/>
  <appender-ref ref="RollingFileAppender "/>
</root>