2009-09-28 8 views
3

Je ne voulais pas rendre le titre trop long, mais cette question fait spécifiquement référence à l'exécution d'un hôte générique NServiceBus en tant que service Windows (grâce à TopShelf) configuré pour fonctionner en tant que système local (sur une machine Vista)Comment activer la journalisation pour un hôte générique NServiceBus?

Dans a previous question J'explique pourquoi j'ai décidé d'adapter l'exemple PubSub pour qu'il fonctionne en tant que service Windows afin que je puisse facilement arrêter et démarrer le service pour me prouver complètement que NServiceBus faisait ce qu'il était censé faire.

Pour une raison quelconque, Log4Net ne peut pas enregistrer quoi que ce soit sur le disque, donc cela pourrait bien être un problème de configuration de Log4Net (débutant)?

ci-dessous est ma tentative force brute pour obtenir une sorte de traçage va - tout ce que je reçois est à ce jour les fichiers ECRIT comme suit:

C: \ logs \ < -GUID-> log4net. log

<?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

Le compte d'utilisateur sous lequel le service s'exécute dispose-t-il des autorisations appropriées pour écrire dans c: \ logs? –

+0

Le service Windows s'exécute en tant que 'Système local'. Comme décrit dans l'autre question, je ne trouve pas un moyen de l'installer pour fonctionner comme mon propre compte utilisateur. – rohancragg

+0

MISE À JOUR: La solution correcte était que je devais ajouter l'interface de marqueur IWantCustomLogging à ma classe EndpointConfig. Maintenant, je me TROUVE TROP la journalisation. Mais je vais laisser la configuration ci-dessus comme un exemple de la façon d'obtenir la journalisation maximale et le suivi ... – rohancragg

Répondre

7

NSB ne captera pas les paramètres du journal à partir de fichiers de configuration par défaut. Pour ce faire, implémentez IConfigureLogging dans votre classe de configuration de noeud final.

Plus d'infos ici:

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

Hope this helps!

/Andreas

+0

Whoa Andreas, merci un million! C'était parfait. Je devais ajouter l'interface de marqueur IWantCustomLogging - si évident une fois que vous le voyez. Peut-être que j'aurais dû essayer tous les échantillons avant d'essayer d'en adapter un ;-) – rohancragg

1

Il semble que vos deux autres appenders lancent des exceptions tout en essayant de se connecter. Je soupçonne le %property{NDC} dans vos modèles - les retirer du modèle et essayez à nouveau.

Si votre modèle contient% propriété {X} alors vous devez définir une propriété avec la touche « X » en utilisant un code tel que

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

où ABC est soit une instance LoggingEvent ou ThreadContext ou GlobalContext.

Je ne sais pas si vous avez des propriétés série avec la touche « NDC », mais je pense pas ...

+0

Merci Vinay. J'ai enlevé ceux-ci et ai fixé une autre erreur dans le nommage de l'appender de dossier de roulement mais je n'obtiens toujours aucun logging. Je débogue les applications dans Visual Studio et il enjambe les lignes Logger.Info() OK. Très étrange ... – rohancragg

Questions connexes