log4net自定义appender无法正常工作

时间:2013-12-23 14:18:57

标签: c# log4net log4net-appender

我已经为我的项目使用log4net创建了一个自定义appender。我使用AppenderSkeleton接口创建了SampleLogAppender类。

namespace Sample.Integrations.Utilities {

public class SampleLogAppender : AppenderSkeleton
{
    public static IContext Context { get; set; }

    protected override void Append(log4net.Core.LoggingEvent loggingEvent)
    {
        if (Context != null)
        {
            Context.LogMessage(RenderLoggingEvent( loggingEvent ));
        }
    }


    protected override bool RequiresLayout
    {
        get { return true; }
    }
}

}

如果我在配置文件中配置此类,则它无效。以下我正在使用的配置。

<?xml version="1.0" encoding="utf-8" ?>
   <configuration>
    <configSections>
       <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,   log4net" />
     </configSections>

   <log4net>
     <appender name="LogAppender" type="Sample.Integrations.Utilities.SampleLogAppender ">
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="[%date{MM/dd/yyyy hh:mm:ss tt}] [%-5level] [%class]-[%method] - [%message] %newline" />
         </layout>
      </appender>
       <logger name="LogRoot">
         <level value="ALL" />
          <appender-ref ref="LogAppender" />
      </logger>
  </log4net>

</configuration>

上面我正在使用的配置文件,但它无法正常工作。下面我正在使用log4net配置。

 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(ConfigLocation));

         Log = log4net.LogManager.GetLogger("LogRoot");

我也有Logger课程。

 public class Logger
{

    public static ILog Log;

    public static string ConfigLocation = string.Empty;

    private static readonly string ConversionPattern = "[%date{MM/dd/yyyy hh:mm:ss tt}] [%-5level] [%class]-[%method] - [%message] %newline";



    public static void ConfigureLog(IContext context)
    {

        SampleLogAppender .Context = context;

        log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(ConfigLocation));

        Log = log4net.LogManager.GetLogger("LogRoot");
    } }

我在启动项目中初始化Logger,如下所示。

Logger.ConfigureLog(_context);

我使用下面的记录器。

Logger.Log.Debug("Test");

当我调用它时,Append()方法不会调用。

请提供一些解决方案。

1 个答案:

答案 0 :(得分:2)

我尝试使用您的配置文件,经过一些修复后,请参阅log4net部分:

<log4net>
  <root>
    <level value="TRACE" />
    <appender-ref ref="LogAppender" />
  </root>
  <appender name="LogAppender" type="Sample.Integrations.Utilities.SampleLogAppender">
   <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="[%date{MM/dd/yyyy hh:mm:ss tt}] [%-5level] [%class]-[%method] -                      [%message] %newline" />
   </layout>
  </appender>
</log4net>

您的代码中出现的一些奇怪的东西是类型中的空格,最后是引号之前的空格。

<appender name="LogAppender" type="Sample.Integrations.Utilities.SampleLogAppender ">