2015-01-22 1 views
3

Я пытаюсь использовать средство log4Net Castle в службе windows. Я не мог заставить его написать журнал, поэтому я решил создать консольное приложение, чтобы попытаться заставить его работать в первую очередь. Я все еще не вижу файл журнала. Что я сделал неправильно или пропустил довольный?Замок Log4Net объект не регистрируется

namespace CastleLoggingFacilityWithLog4Net 
{ 
    class Program 
    { 
     private static IWindsorContainer _container; 

     static void Main(string[] args) 
     { 

      _container = new WindsorContainer(); 
      _container.Register(Component.For<IService>().ImplementedBy<Service>().LifestyleTransient()); 
      _container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.Log4net)); 
      //_container.Install(FromAssembly.This()); 

      var service = _container.Resolve<IService>(); 
      service.TestLogging(); 
     } 
    } 

    public interface IService 
    { 
     void TestLogging(); 
    } 

    public class Service : IService 
    { 
     private ILogger logger = NullLogger.Instance; 

     public void TestLogging() 
     { 
      Logger.Info("this is a test"); 
     } 

     public ILogger Logger 
     { 
      get { return logger; } 
      set { logger = value; } 
     } 

    } 
} 

Добавить мой log4net конфигурации в log4net.config выглядит следующим образом ...

<configuration> 
    <configSections> 
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
<log4net> 
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="logging\log.txt" /> 
    <appendToFile value="true" /> 
    <datePattern value="dd-MM-yyyy'.log'" /> 
    <staticLogFileName value="false" /> 
    <rollingStyle value="Date"/> 
    <maximumFileSize value="10MB" /> 
    <maxSizeRollBackups value="5" /> 
    <dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%utcdate %-5level %logger - %message%newline%exception" /> 
    </layout> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingFile" /> 
</root> 
</log4net> 
</configuration> 
+0

В службе, почему вы устанавливаете logger = NullLogger.Instance? – wageoghe

+0

Может быть, это [ссылка] (http://stackoverflow.com/questions/2297282/logging-with-castle-facilities-logging-and-log4net) может помочь вам – prasy

+0

Спасибо @prasy Я уже видел эту ссылку. –

ответ

1

Оказывается, что не было ничего плохого в моем коде или конфигурации. Проблема заключалась в том, что config log4net не был установлен для копирования в выходной каталог! Не стыдно ни Замок, ни log4net не могли сказать мне, что лог-файл не найден.

+0

log4net предупреждает вас о ошибках конфигурации только тогда, когда вы его запрашиваете (см. Раздел «Как включить внутреннюю отладку log4net» здесь: https://logging.apache.org/log4net/release/faq.html). Иначе он остается тихим – samy

+0

Спасибо @samy, что отличный совет –

0

Вы должны добавить следующий код в Main() Для того, чтобы сгенерировать файл журнала, это приведет к configSource использоваться

log4net.Config.XmlConfigurator.Configure(); 

Edit: Согласно файла Значение в app.config. Он будет записывать файлы журнала в ProgramFiles, не все пользователи имеют права на запись/редактирование файлов в программных файлах. Поэтому я рекомендую записывать файлы журналов в AppData.

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
<file value="${LOCALAPPDATA}\logging\log.txt" /> 
.... 
</appender> 
+0

Это не кажется правильным. Интеграция log4net от Castle уже содержит код для чтения файла конфигурации log4net. Я думаю, что проблема заключается в установке logger = NullLogger.Instance в службе. – wageoghe

+0

@wageoghe Я не думаю, что logger = NullLogger.Instance - проблема, пожалуйста, обратитесь к этой [link] (http://docs.castleproject.org/Default.aspx?Page=Logging-Facility&NS=Windsor&AspxAutoDetectCookieSupport=1) – prasy

+0

I ' сегодня узнал что-то новое, спасибо! – wageoghe