2009-09-28 38 views
3

我不想让标题时间过长,但是这个问题明确指的是将NServiceBus通用主机作为Windows服务运行(归功于TopShelf),配置为以本地系统(在Vista机器上)如何启用NServiceBus通用主机的日志记录

a previous question我解释了为什么我决定让PubSub示例作为Windows服务运行,以便我可以轻松停止并启动服务,以完全向自己证明NServiceBus正在执行它的功能应该做的。

出于某种原因,我无法让Log4Net将任何内容记录到磁盘,所以这可能只是Log4Net(新手)配置问题?

下面是我的蛮力试图得到某种跟踪去的 - 所有我得到到目前为止writen文件内容如下:

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:\ logs的正确权限? – 2009-09-29 07:09:37

+0

Windows服务作为“本地系统”运行。正如其他问题所述,我没有找到一种方法来安装它作为我自己的用户帐户运行。 – rohancragg 2009-09-29 07:51:11

+0

更新:正确的解决方案是我必须将标记接口IWantCustomLogging添加到我的EndpointConfig类。现在我得到了很多日志。但我将离开上述配置作为如何获得最大日志记录和跟踪的示例... – rohancragg 2009-09-29 08:06:20

回答

7

NSB不会拿起从配置文件作为默认的日志设置。为此,请在您的端点配置类中实施IConfigureLogging。

此处了解详情:

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

希望这有助于!

/Andreas

+0

哇安德烈亚斯,谢谢!这是现货。我不得不添加标记界面IWantCustomLogging - 一旦你看到它就很明显。也许我应该在尝试适应其中一个之前尝试所有样品;-) – rohancragg 2009-09-29 08:04:31

1

看起来好像你的另外两个追加程序正在抛出异常,而尝试登录。我怀疑你的模式中有%property{NDC} - 将它们从模式中删除并重试。

如果你的模式包含%属性{X},那么你需要设置一个属性与键“X”用代码如

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

其中ABC或者是一个LoggingEvent实例或ThreadContextGlobalContext

,如果你已经设定键“NDC”的属性,但我怀疑不是我不知道......

+0

感谢Vinay。我删除了这些并修复了滚动文件appender命名中的另一个错误,但我仍然没有得到任何日志记录。我正在调试Visual Studio中的应用程序,并且正在逐步完成Logger.Info()行的确定。很奇怪...... – rohancragg 2009-09-29 07:50:00