AzureStorageのWADLogsTableにログを出すときの注意

スポンサーリンク

備忘録です。

log4netを使ってWADLogsTableにログを出力するわけですがAzureSDKのバージョンアップに伴って色々と使い方が変わってきたみたいです。

ちょっと嵌ったことがあるので色々とかいておきます。

log4netでAzureにログを出力する方法は下記のURLたちをご参照ください。(英語で申し訳ない・・・)

Logging with Log4Net on the Azure platform
Log4Net on Azure I have always been a big fan of the Log4Net framework for all of my logging needs in applications and I would like to use this framework in my ...
http://www.kongsli.net/nblog/2011/08/03/using-log4net-in-azure-compute/

■ 注意点 1

Azure.Diagnosticsの参照をするとConfigファイルに下記の設定が必要になります。この設定がないと転送されないです。

気をつけないといけない点は参照するDLLのバージョンとTokenがConfigファイルの設定と合致している必要があることです。

ここを意識しないと完璧にはまります。

※AzureSDK2.1の場合

<system.diagnostics>
<trace>
<listeners>
      <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics"/>
       </listeners>
</trace>
</system.diagnostics>

あと、AzureプロジェクトのSDKのバージョンとあっていないとログが出力されないです。

AzureプロジェクトのSDKが2.1ならDiagnosticsも2.1を参照する必要があるみたいです。

実際、AzureプロジェクトのSDK2.2でDiagnostics2.1の組み合わせでログテーブルに転送されてませんでした。(ここ嵌った・・・。)

AzureプロジェクトのSDKバージョンを知りたい場合は、Azureプロジェクトを右クリック → プロパティから見れます。

■ 注意点 2

Azureプロジェクトに下記の設定が増えています。

※ロールインスタンスをダウぶるクリックで参照できます。

log002

クリックすると各ログ情報の出力設定を行えます。

log001

ここで設定した情報はロールインスタンス配下の[ diagnostics.wadcfg]に出力されます。

log4netで出力ログレベルの指定がありますが、こちらの設定が優先されるみたいなので注意です。

log4netで下記のようにERRORからFATALだけ出す用に設定しても、上記の構成でログレベルをINFOやALLにしているとそちらが優先されて出力されます。

<filter type="log4net.Filter.LevelRangeFilter,log4net">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>

多分、log4netがDiagnosticsを継承しているのでベースの設定が優先されるんだと思います。

コメント