スキップしてメイン コンテンツに移動

log4net with ASP.NET MVC 5.0 on Azure WebSite

log4netをASP.NET MVC 5.0 on AzureWebSiteで使ってみた。

環境は以下。
  • VisualStudio2013
  • log4net1.2.13
  • Windows AzureのWebサイト

以下手順。
  1. NuGetからげっと
    1. NuGet起動、基本ですね。
    2. log4netインスト完了。
  2. 設定します
    1. Global.asaxでlog4net用のxmlを読み込み
    2. ※ここに設定入れずに、Web.configに入れる方法もある。
      protected void Application_Start()
      {
          // なんか他の設定もするならこの辺にほげもげ
          // で、以下log4net用のconfigファイルを設定。
          log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Server.MapPath(@"~/App_Data/log4net.xml")));
      }
      
    3. log4net.xmlを作成
      Log4Net を利用してログを記録する を参考に設定!
  3. が、うまくでないときは
    • log4netでうまくログが出ない場合
      特に、↓これだけでもだいぶ違った。
      ログ設定を読み終えた後で、「logger.Logger.Repository.Configured」を確認する。ここがFalseの場合、設定ファイルがきちんと読めていない。”
    • ログを出すためのログが欲しかった・・・。
    • AssemblyInfo.csへの設定とか、Web.conigの設定とか、
      いろいろ迷う方法がありますが、必要ありませんでした。
  4. その他
    1. AzureのWebサイトに直接吐き出すために、Fileを無理くり変更。どうなのよ、これ・・・。
      protected void Application_Start()
      {
          // なんか他の設定もするならこの辺にほげもげ
          log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Server.MapPath(@"~/App_Data/log4net.xml")));
          log4net.Repository.ILoggerRepository[] repos = log4net.LogManager.GetAllRepositories();
          foreach (var repo in repos)
          {
              foreach(var appender in repo.GetAppenders())
              {
                  log4net.Appender.FileAppender file = appender as log4net.Appender.FileAppender;
                  if(file != null)
                  {
                      // 実際にはファイル名判定かけながら、適切なファイル名を設定している。
                      file.File = Server.MapPath(@"~/適切なDir/") + 適切なファイル名;
                      file.ActivateOptions();
                  }
              }
          }
      }
      
    2. Blobストレージにも飛ばせる
      Windows AzureでLog4Net RollingFileAppenderを使う
      迷ったが、今回はパスしてみた。
      またの機会にやるとします。
    3. FTPでログを取得するために排他制御の設定もいれましょう
      Log4Netで複数プロセスから同じログファイルに書き込み を参考に設定!
以下感想。
  • 意外とIISで使っている設定方法がGoogle先生に教えてもらえない
    (単なる聞き方の問題かも・・・)
  • NuGetから取得している人の情報がない
    (当たり前すぎて書かないのか・・・)
  • 知ってれば楽勝だけど、知らないとはまる
    (知らなくてはまった・・・)
  • やっぱり便利!!!
以上です。

コメント

このブログの人気の投稿

Excelのマクロの差分もGitHubみたいに見たいよね

なんやかんやでまだ残っているExcelマクロ。修正したはいいが、差分が・・・。 Google先生に聞いてみるとWinMergeでできるらしいが、なぜかうまくいかない。 そう、WinMergeもExcelもバージョンが新しくなっていたのでうまくいかなかったみたい。 前提は Excel 2013 WinMerge 2.14.0-jp63 over です。 以下差分を確認するための手順です。 WinMerge をインストール ここから WinMerge の2.14.0-jp-63 より新しいバージョンをダウンロード 画面に従ってぽちぽち押していけばいい。 ただし・・・このときに必ずカスタムインストールで プラグイン にチェックを入れること!!(このプラグインを利用します) WinMerge のプラグインの設定変更(やらなくてもOK) WinMerge を起動 プラグイン → プラグインの設定 → CompareMSExcelFiles.sct をダブルクリック ”ワークブックの情報を複数ファイルに展開する” にチェックを入れる Excel の設定変更 ファイル → オプション → セキュリティセンター → セキュリティ センターの設定 ボタンを押下 マクロの設定 を選択 ”VBA プロジェクト オブジェクト モデルへのアクセスを信頼する” にチェックを入れる WinMerge で差分を表示する WinMerge を起動して、比較したいファイルを二つ選択する プラグイン → 展開プラグインの選択 → ファイル展開プラグイ に CompareMSExcelFiles.sct を選択して OK ボタンを押下する 各シートの差分と合わせて、*.bas の形式でマクロの差分が表示される(はず)

間違ったフォーマットのプログラムじゃないんだけど

以下エラーに対し、 ファイルまたはアセンブリ 'SSPI'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。 以下環境で対応した話です。 VisualStudio2012(C# ASP.NET MVC4.0) IIS7.5 とあるところのdllを使用中 ASP.NETをIISに発行しようとしたら、上記エラーが発生。 他のプロジェクトでは問題なく発行できているのに、 何かと思ってみたら、google先生に尋ねてみると、 DLLファイルの対象プラットフォーム(32bit/64bit)が異なる とのことでした。 このサイトでは対処方法として、 運用環境のプラットフォームに合わせ、適切なランタイムファイルを配布してください。 と記載されていますが、今回の私のようにとあるところのdllを使用している場合などは、 そうもいかない場合もあるでしょう。 そこでdllを変更できない場合には、 IISのアプリケーションプールの設定で、 32bitアプリケーションを有効化してあげることで対応できます。 以下手順です。 コントロールパネル → 管理ツール → インターネット インフォメーション サービス (IIS) マネージャー を起動します。 変更したいアプリケーションを右クリックして、詳細設定を選択します。 32ビットアプリケーションの有効化をTrueに変更します。 もう一度発行します。 ここまでです。 簡単だけど知らないとなかなかはまるかなって気がしますね。 独特のくせなのかもしれません。 そして、次なるエラー発生中です・・・。

SQLServer2008でのトランザクションログの切り捨て方

SQL Server 2008でとあるDBのトランザクションログが一杯に。 BACKUP LOG DatabaseName WITH TRUNCATE_ONLY を使ってトランケートしようとしたら、 'TRUNCATE_ONLY' はBACKUP オプションとして認識されません。 との冷たい返事。2008で廃止されていたのを忘れていた。 SQL Server 2008 で廃止されたデータベース エンジンの機能@MSDN そこでヌルデバイスを使用してバックアップを取得する方法で、切り捨てを試みる。 BACKUP LOG DatabaseName TO DISK = ‘nul’ GO するとまた冷たい返事。 現在、データベースのバックアップが存在しないので、BACKUP LOG を実行できません。 2008では過去にフルバックアップを取得しておかないと、ランザクションのバックアップが取得できないことを忘れてた。てなわけで、まずはデータベースのフルバックアップを取得して、 BACKUP DATABASE DatabaseName TO DISK = ‘nul’ GO もう一度トランザクションのバックアップをして、やっと切り捨てれた。最初から単純にしておけばよかった・・・。