2

我已经为我的项目使用 log4net 创建了一个自定义附加程序。我使用 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");

我也有记录器类。

 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() 方法不会调用。

请给出一些解决方案。

4

1 回答 1

3

我已经尝试使用您的配置文件,经过几次修复后,请参阅 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 ">
于 2014-01-26T12:07:40.253 回答