Пользовательское приложение log4net не работает

У меня есть собственный аппендер, использующий log4net для моего проекта. я создал класс SampleLogAppender, используя интерфейс AppenderSkeleton.

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 () не вызывается.

пожалуйста, дайте несколько решений.


person Ram Nivas    schedule 23.12.2013    source источник
comment
Похоже, вы неправильно написали appender под элементом ‹log4net›.   -  person Russell Patterson    schedule 23.12.2013
comment
пожалуйста explayn что не работает значит.   -  person Felice Pollano    schedule 23.12.2013
comment
Метод Append в классе SampleLogAppender больше не вызывается.   -  person Ram Nivas    schedule 23.12.2013
comment
Где вы устанавливаете свойство Context?   -  person stuartd    schedule 23.12.2013
comment
@stuartd, я отредактировал вопрос. пожалуйста, дайте мне какое-нибудь решение.   -  person Ram Nivas    schedule 23.12.2013
comment
Logger.ConfigureLog (_context); в стартап-проекте. свойство context является статическим. поэтому я использую SampleLogAppender.Context = context;   -  person Ram Nivas    schedule 23.12.2013
comment
Я думаю, вам, возможно, придется позвонить ActivateOptions() в приложении, когда вы изменяете его во время выполнения.   -  person stuartd    schedule 23.12.2013
comment
@stuartd, я использую log4net для надстройки проекта. в этом проекте это не работает. но я использую log4net для какого-то проекта exe, в этом проекте он работает. я не знаю, что это происходит.   -  person Ram Nivas    schedule 24.12.2013
comment
Вы используете один и тот же код в обоих проектах?   -  person stuartd    schedule 24.12.2013
comment
да. Я использую один и тот же код в обоих проектах.   -  person Ram Nivas    schedule 24.12.2013
comment
позвольте нам продолжить обсуждение в чате   -  person Ram Nivas    schedule 24.12.2013
comment
Вы можете попробовать программно включить внутреннюю отладку log4net. Вам необходимо установить для свойства log4net.Util.LogLog.InternalDebugging значение true. Очевидно, что чем раньше это будет установлено, тем больше будет произведена отладка. Это может показать вам, есть ли ошибка внутри Log4Net.   -  person Eric Scherrer    schedule 03.01.2014


Ответы (1)


Я пробовал работать с вашим файлом конфигурации, и после нескольких исправлений он сработал, см. Раздел 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 ">
person hquinn    schedule 26.01.2014