Azure ワーカー ロールで log4net を動作させるためのソリューションを必死に探しています。ゆっくりと私を夢中にさせます。
このブログhttp://blog.tylerdoerksen.com/2012/04/17/logging-in-azure-part-2table-storage (感謝) で説明されている手順に従いましたが、これは理にかなっているようで、log4net のログは機能します。次の条件で夢のように:
- エミュレーターでワーカー ロールをローカルで実行し、ログをローカル ストレージに永続化する
- エミュレーターで Worker ロールをローカルで実行し、ログをリモート ステージング Azure Table Storage に永続化する
Worker Role Service を Azure にデプロイすると、LogEntities テーブルに何も記録されません。このビット、信じられないほどイライラするのはこのビットです。
ワーカー ロール app.config で log4net デバッグを有効にしました。WADLogsTable に次のトレースが表示されます。
log4net: [TableStorageAppender] という名前のアペンダーをファイナライズしています。
以上です。追加してから通常見られると予想される他のlog4netデバッグ情報はありません
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
私の Worker Role app.config に。
Worker Role オーバーライドされた Run メソッドで log4net を構成しています。
public override void Run()
{
try
{
XmlConfigurator.Configure();
ILog Logger = LogManager.GetLogger(GetType());
Trace.WriteLine("Trace: CheckInService.Run()");
Logger.Info("log4net: CheckInService.Run()");
//open the Service and do some other stuff etc
while (true)
{
Thread.Sleep(1800000);
}
catch (Exception ex)
{
Trace.TraceError("There was a problem opening the CheckInService");
}
}
これは私の完全なapp.configです
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" name="log4net" />
</configSections>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<log4net>
<appender type="Cloud.Services.Logging.TableStorageAppender, Cloud.Services.Logging" name="TableStorageAppender">
</appender>
<root>
<level value="All" />
<appender-ref ref="TableStorageAppender" />
</root>
</log4net>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="AzureDiagnostics">
<filter type="" />
</add>
</listeners>
</trace>
</system.diagnostics>
</configuration>
ロギング アペンダー (TableStorageAppender) の実装は独自のアセンブリ (Cloud.Services.Logging) にありますが、違いはないと思いますか?
誰でもアイデアはありますか?