2009-09-28 1 views
3

Я не хотел, чтобы заголовок был слишком длинным, но этот вопрос конкретно относится к запуску универсального узла NServiceBus в качестве службы Windows (благодаря TopShelf), настроенного для работы в качестве локальной системы (на машине Vista)Как включить ведение журнала для общего хоста NServiceBus

В a previous question Я объясняю, почему я решил адаптировать образец PubSub для работы в качестве службы Windows, чтобы я мог легко остановить и запустить службу, чтобы полностью доказать себе, что NServiceBus делает то, что было должен делать.

По какой-то причине я не могу заставить Log4Net регистрировать что-либо на диске, так что это может быть просто проблемой конфигурации Log4Net (newbie)?

Ниже мой перебор попытка получить какое-то трассировку происходит - все, что я получаю до сих пор файлы прописан следующим образом:

C: \ журналы \ < -GUID-> log4net. войти

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" /> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" /> 
    <sectionGroup name="common"> 
     <section name="logging" type="Common.Logging.ConfigurationSectionHandler, NServiceBus.Core"/> 
    </sectionGroup> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 
    </configSections> 

    <!-- in order to configure remote endpoints use the format: "[email protected]" 
     input queue must be on the same machine as the process feeding off of it. 
     error queue can (and often should) be on a different machine. 
    --> 

    <MsmqTransportConfig 
    InputQueue="worker2" 
    ErrorQueue="error" 
    NumberOfWorkerThreads="1" 
    MaxRetries="5" 
    /> 

    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="Messages" Endpoint="messagebus" /> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

    <common> 
    <logging> 
     <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, NServiceBus.Core"> 
     <arg key="configType" value="INLINE"/> 
     </factoryAdapter> 
    </logging> 
    </common> 

    <log4net debug="true"> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> 
     <param name="File" value="c:\logs\Subscriber2.log" /> 
     <param name="AppendToFile" value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="2" /> 
     <maximumFileSize value="100KB" /> 
     <staticLogFileName value="true" /> 
     <datePattern value="yyyyMMdd" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionpattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="EventLogAppender" type="log4net.appender.eventlogappender"> 
     <applicationname value="Subscriber2.EndPointConfig_v1.0.0.0" /> 
     <layout type="log4net.layout.patternlayout"> 
     <conversionpattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 


    <root> 
     <level value="ALL" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
     <appender-ref ref="EventLogAppender" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 

    </log4net> 

    <appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 

    <system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     <add 
      name="textWriterTraceListener" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="c:\logs\log4net.log" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 

</configuration> 
+0

учетная запись пользователя, под которым запущена служба, у него есть соответствующие разрешения на запись в C: \ журналы? –

+0

Служба Windows работает как «Локальная система». Как описано в другом вопросе, я не нашел способ установить его для запуска в качестве собственной учетной записи пользователя. – rohancragg

+0

UPDATE: правильным решением было то, что мне пришлось добавить интерфейс маркера IWantCustomLogging в мой класс EndpointConfig. Теперь я получаю WAY TOO MUCH logging. Но я оставлю эту конфигурацию в качестве примера того, как получить максимальную регистрацию и трассировку ... – rohancragg

ответ

7

NSB не подберет настройки журнала из конфигурационных файлов по умолчанию. Для этого выполните IConfigureLogging в вашем классе конфигурации конечной точки.

Больше информации здесь:

http://tech.groups.yahoo.com/group/nservicebus/message/3655

Надеется, что это помогает!

/Andreas

+0

Whoa Andreas, спасибо миллион! Это было на месте. Мне пришлось добавить интерфейс маркера IWantCustomLogging - настолько очевидный, как только вы его увидите. Возможно, я должен был попробовать все образцы, как есть, прежде чем пытаться адаптировать один из них ;-) – rohancragg

1

Это выглядит так, как будто ваши два других appenders бросают исключения при попытке войти. Я подозреваю, что %property{NDC} в ваших шаблонах - удалите их из шаблона и повторите попытку.

Если шаблон содержит% свойства {X}, то вам необходимо установить свойство с ключом «X» с помощью кода, как

ABC.Properties["X"] = /* some value */ 

где ABC является либо LoggingEvent экземпляром или ThreadContext или GlobalContext.

Я не знаю, если вы установили свойство с ключом «НДЦ», но я не подозреваю ...

+0

Спасибо Vinay. Я удалил их и исправил еще одну ошибку в названии скользящего файла appender, но я все еще не получаю никаких записей. Я отлаживаю приложения в Visual Studio и перехожу через строки Logger.Info() ОК. Очень странно ... – rohancragg

Смежные вопросы