Azure Web Apps のログ出力を log4net で

こんにちは、上坂(@takashiuesaka)です。

Azure Web Apps、とっても便利ですね。最近は何か作るときにWebRole,WorkerRoleでの設計・実装は全く考えなくなりました。

ちょっと機会があったのでそんなAzure Web Appsでlog4netを使ってアプリケーションログを出力する方法を調べました。ものすごい簡単です。


まずは普通にlog4netをセットアップします。NuGetでインストールしたら、バージョン2.0.3でした。

log4net バージョン

AssemblyInfo.csにlog4netを登録しておきます。

[assembly: log4net.Config.XmlConfigurator(Watch = true, ConfigFile = "log4net.config")]

log4netの設定をweb.configに記載する方法と外部ファイルに出す方法がありますが、私は外部ファイルの方が好きなのでlog4net.configというファイルを作ることにしましたので、登録時にもその設定が入っています。
次にlog4net.configファイルをプロジェクト直下に作成します。プロパティの「出力ディレクトリにコピー」の項目は「コピーしない」のままで構いません。

log4net.configには次のような設定を記載します。

<?xml version="1.0" encoding="utf-8" ?>
<
log4net>
  <
appender name="TraceAppender" type="log4net.Appender.TraceAppender">
    <
layout type="log4net.Layout.PatternLayout">
      <
conversionPattern value="%logger - %message" />
    </
layout>
  </
appender>
  <
appender name="ConsoleAppender" type="log4net.Appender.DebugAppender">
    <
layout type="log4net.Layout.PatternLayout">
      <
conversionPattern value="%logger - %message" />
    </
layout>
  </
appender>
  <
root>
    <
level value="ALL" />
    <
appender-ref ref="TraceAppender" />
    <
appender-ref ref="ConsoleAppender" />
  </
root>
</
log4net>

Appenderが2つありますが、重要なのはlog4net.Appender.TraceAppenderの方です。もう一つのlog4net.Appender.DebugAppenderは、ただ単にVisualStudioの出力タブにログ出力内容を出したかっただけなので消しても構いません。
準備はこれだけです。アプリ内でログ出力する実装をします。

public class HomeController : Controller
{
   
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
   
public ActionResult Index()
    {
        log.Info(
string.Format("{0} : 呼ばれたよ", DateTime.Now));
       
return View();
    }


デバッグして出力タブに問題なく出力されたことを確認したら、Azureにデプロイします。デプロイしたWeb Appsの「構成」を開きます。(デプロイ前でも構いませんけど)

構成タブ

アプリケーション診断の項目に3つのオン/オフスイッチがあるかと思いますので、好きなものをオンにします。Table Storageか、Blog Storageへの出力をオンにしておくと、監視しやすいかと思います。

TableとBlobをオン

これだけです。簡単ですね。画面にアクセスしてログがちゃんと出力されるかを確認してみましょう。ログの出力には少し時間がかかります。数分待ってからStorageへアクセスすると、ログ出力されていることが確認できるかと思います。

Blob出力結果

とっても簡単ですね。残念なのはログが数分~数十分単位で「1行」にまとめられてしまうので、大量にログを出力してしまうととても見づらいことです。これ、なんとかならないもんでしょうか・・・。


ネクストスケープ企業サイトへ

NEXTSCAPE

検索する

タグ

メタデータ

投稿のRSS