2017-02-03 110 views
5

我有一些工作者角色項目,我想利用log4net功能來記錄信息。不幸的是,我的日誌實際上並沒有出現在我的輸出窗口中。WorkerRole log4net跟蹤appender日誌不出現在輸出窗口

我跨過在調試器日誌行,並且輸出窗口吐出下面的行來代替:

'WaWorkerHost.exe'(CLR v4.0.30319:RdRuntime):加載 「C: \ Windows \ Microsoft.Net \組件\ GAC_MSIL \ System.Runtime.Caching \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Runtime.Caching.dll」。 跳過加載符號。模塊已經過優化,調試器選項 「Just My Code」已啓用。

看到這是我的代碼,我很困惑爲什麼我看到這個異常。下面是我記錄的app.config設置:

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="Montetary.Agents.HappyBirthday.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <system.diagnostics> 
    <trace> 
     <listeners> 
     <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics"> 
      <filter type="" /> 
     </add> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
    <log4net> 
    <appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <!-- can be any pattern you like --> 
     <conversionPattern value="%logger - %message" /> 
     </layout> 
    </appender> 
    <!-- does not have to be at the root level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="AzureTraceAppender" /> 
    </root> 
    </log4net> 

我試圖按照此question的例子,但結果是一樣的

+0

您試圖查看日誌的地方?它們在Visual Studio輸出窗口中不可見。您需要連接到存儲帳戶,然後查看錶格「WADLogsTable」 –

+0

每個我讀過的博客,traceappender應在日誌記錄時寫入輸出窗口:http://interactivelogic.net/wp/2010/02/aspnet -logging-to-output-window-with-log4net/ –

+0

如果這不是用於寫入輸出日誌的正確的log4net appender,請告訴我,我會使用任何東西。我想確保在將項目上傳到azure之前將正確的東西寫入日誌中 –

回答

-1

我才得以實現。

創建一個具有工作角色的Azure服務(目標框架:.NET Framework 4.5.2),並將log4net版本2.0.7添加到工作者角色。

在app.config中添加了log4net的以下部分配置。

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 

and log4net section look as following。

<log4net> 
    <appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <!-- can be any pattern you like --> 
     <conversionPattern value="%logger - %message%newline"/> 
     </layout> 
    </appender> 
    <!-- does not have to be at the root level --> 
    <root> 
     <level value="ALL"/> 
     <appender-ref ref="AzureTraceAppender"/> 
    </root> 
</log4net> 

到目前爲止我所做的是完全一樣的,你在你的配置文件已經配置。

在WorkerRole.cs的 OnStart方法

log4net.Config.XmlConfigurator.Configure(); 

在WorkerRole.c在類級別以下創建輔助角色記錄的第一行

配置log4net的

private readonly ILog logger = LogManager.GetLogger("WorkerRole"); 

試圖在記錄信息OnStart,OnStop,Run和RunAsync方法。

//In OnStart 
logger.Info("From log4net : WorkerRole1 has been started"); 

//In OnStop 
logger.Info("From log4net : WorkerRole1 has stopped"); 

//In Run 
logger.Info("WorkerRole1 is running"); 

//In RunAsync 
logger.Info("From log4net : Working"); 

運行WorkerRole指向Development Storate帳戶,在輸出窗口中顯示日誌條目,如下所示。爲區分跟蹤寫入的條目,我在條目前加上了「From log4net:」。

WorkerRole: WorkerRole - From log4net : WorkerRole1 has been started 

WaWorkerHost.exe Information: 0 : From log4net : WorkerRole1 is running 

WorkerRole: WorkerRole - From log4net : Working 

enter image description here

我想你可能在你的代碼中缺少的部分可能是配置log4net的在OnStart。當我從OnStart方法中刪除log4net.Config.XmlConfigurator.Configure();行時,它停止在輸出窗口中顯示來自log4net的條目。

+0

TraceAppender已經寫入輸出窗口的原因是我爲什麼要減少配置中的複雜度。當我使用microsoft構建的跟蹤工具時,會在輸出窗口中顯示詳細信息。在我的理解中,Log4net的AzureTraceAppender只是傳遞給診斷系統,所以它應該自動出現在輸出窗口中。 log4net的AzureTraceAppender剛剛破解。 –

+0

我想我按照你想要的方式工作。給我一些時間我會更新我的答案。 –

+0

我更新了我的答案。這應該可以幫助您解決問題。 –

1

有一些東西,你可以檢查:

你叫log4net的配置你寫之前,您日誌文件(僅一次就足夠了):

log4net.Config.XmlConfigurator(); 

接下來的事情就是添加刷新到您的配置:

<appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender"> 
    <param name="ImmediateFlush" value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <!-- can be any pattern you like --> 
    <conversionPattern value="%logger - %message" /> 
    </layout> 
</appender> 

這將立即刷新消息。

確保您已將Azure診斷程序配置爲用於調試的所有信息。

然後您可以啓用調試內部log4net調試。請參閱internal debugging on this log4net faq page。標準它應該登錄到您已配置的偵聽器。將autoflush =「true」選項添加到跟蹤元素。或者查找您可以寫入的工作者角色的目錄並訪問以讀取日誌。

+0

感謝彼得,我會嘗試使用ImmediateFlush來查看輸出是否到達輸出窗口 –

+0

我已經將XmlConfigurator添加到了assemblyinfo,並且包含了immediateFlush,但是沒有骰子,仍然不起作用。我已經刪除了log4net,現在正在使用直接運行的診斷工具。 –