![]() |
連載:VBで実践! 外部コンポーネント活用術オープンソースのロギング・サービス「log4net」を使うデジタルアドバンテージ 岸本 真二郎2007/12/25 |
|
|
Apache Logging Serviceプロジェクトのlog4net
アプリケーションの開発では、コーディングが完了して動作確認をしたらきっぱり開発者の手を離れる……などということはほとんどないでしょう。コンシューマ向けのパッケージ作成であれば入念な動作テストが行われた後にリリースということになるでしょうが、特に社内で使用するアプリケーションの作成では、配布後にいろいろな修正要求や「うまく動かないんだけど……」といったリクエストを受け取ることが多々あります。
ユーザーからの「うまく動かない」という報告があった場合、「動かない」状況をきちんと(開発者が納得できるような)説明をしてもらえることは(まずほとんど)期待できません。そのためアプリケーションにログ機能を持たせ、ログ・ファイルに実行状態を書き込んだり、エラー発生時にはイベント・ログを出力するなどして問題が発生した場合の原因特定の手掛かりを残しておくことは不可欠ともいえます。
Visual Basic(以降、VB)では、My.Application.Logオブジェクトを使ってログを記録できますが、本稿では、オープンソースとして公開されているApache Logging Services Projectの「log4net」というログ作成ツールを紹介します。log4netはJava用に作成されたログ作成ツールである「log4j」をベースに作成されたもので、.NET Framework用のlog4net以外にも、C++用のlog4cxx、PHP用のlog4phpなども提供されています。
log4netの特徴はなんといってもログの出力先の構成の柔軟さにあります。通常のファイルに出力することはもちろん、一定のファイル・サイズでログ・ファイルを切り替えたり、月ごとにログ・ファイルを分けたり、イベント・ログを出力先にしたり、さらにはSQL Serverにログを書き込むことや、ログをメール送信することも可能です。構成の変更はビルド後でも行えるので、ログ出力の構成を変更するのにコードを修正したり、再ビルドしたりする必要はありません。
log4netを使ったサンプルを作ってみる
まずはlog4netを使った簡単なサンプルを紹介しましょう。
log4netは、「Download Apache log4net」のページからソース・コードとバイナリが含まれたZIPファイルをダウンロードできます(本稿執筆時点の最新バージョンは1.2.10で、ダウンロードできるファイルは「incubating-log4net-1.2.10.zip」)。
ダウンロードしたZIPファイルを展開すると、さまざまなターゲット向けのバイナリやドキュメント、ソース・ファイルなどが含まれているのが分かりますが、VB 2005でlog4netを利用する場合は、bin\net\2.0にあるlog4net.dllを使用します。.NET Framework 1.1を使用する場合は、bin\net\1.1に含まれるlog4net.dllを使用します。なお、ZIPファイルを展開するフォルダはどこでも構いません。
■VB 2005でプロジェクトを作成
ここでは、一番シンプルなWindows用のアプリケーションであるコンソール・アプリケーションを作成します。Visual Studio 2005からプロジェクトの新規作成でコンソール・アプリケーションのテンプレートを選択して、プロジェクトを作成します。
■参照の追加
プロジェクトが作成できたら、プロジェクトからlog4netが利用できるように「参照の追加」を行います。
これには、ソリューション・エクスプローラに表示されているプロジェクトを右クリックして表示されるメニューから[参照の追加]を選択し、先ほどのlog4net.dllを追加します。ソリューション・エクスプローラのツールバーから[すべてのファイルを表示]ボタンをクリックしておくとプロジェクトのツリーの中に「参照設定」という項目が表示されますので、そこから[参照の追加]を行ってもよいでしょう。
![]() |
| log4net.dllへの参照の追加 |
■アプリケーション構成ファイル「app.config」の追加
log4netの構成を記述するためにアプリケーション構成ファイルである「app.config」を用意します。これもソリューション・エクスプローラでプロジェクトを右クリックして[追加]−[新しい項目]を選択してから、テンプレートとして「アプリケーション構成ファイル」を選択します。ファイル名はapp.configのままで大丈夫です。
![]() |
| アプリケーション構成ファイル「app.config」の追加 |
■log4netを使用できるようにコードを追加
次にlog4netのアセンブリ情報を追加します。これはlog4netの初期値を指定するもので、構成ファイルの名前や、構成情報が修正された際に構成情報を再ロードするように構成情報の監視(Watch:=True)を指定します。ここでは、構成ファイルはデフォルトのまま(app.config)ですので、構成情報のファイル名の指定は行っていません(ASP.NETの場合については後述します)。ソリューション・エクスプローラから「My Project」の項目を展開して、コード・エディタでAssemblyInfo.vbを開きます*1。そして、AssemblyInfo.vbの最後に次の1行を追加します。
| |
| AssemblyInfo.vbに追加するコード |
| *1 ソリューション・エクスプローラに「My Project」が表示されていない場合は、ソリューション・エクスプローラのツールバーの「すべてのファイルを表示」をオンにしてください。 |
■アプリケーション構成ファイルの修正
続いては、どんな媒体にログを出力するかというlog4netの構成を決めます。この構成は、先ほど作成したapp.configに記述していきます。
app.configにすでに記述されている内容はそのままにして、リスト1に示すように<configuration>要素の中に<configSection>要素と<log4net>要素を追加します。ここでは最低限のログ出力ということで、ファイルにログを出力するように設定しています。リスト1では、「C:\log-file.txt」に追加でログを書き込む指定を行っています(内容についての解説は後述)。
| |
| リスト1 app.configの内容 |
■ログ出力のコード追加
以上でログを作成する準備ができました。最後にソース・コードにログを記録するコードを記述していきます。
まず、ログ出力を行うオブジェクト(インスタンス)を取得する必要があります。これには、
|
というコードをModule内の先頭に記述しておきます。このコードはlog4net利用時の定型的なものなので、オマジナイだと思ってコピー&ペーストしておけばよいでしょう。これによりlogという名前のオブジェクトを使ってログの出力が行えるようになります。
自分で定義したクラスでログを出力したい場合は、クラス定義の先頭部分に、
|
と記述しておき、クラス内のメソッドでlogオブジェクトのメソッドを呼び出せるようにしておきます。
log4netでログを出力するプログラムは、例えば次のリスト2のようになります。
| |
| リスト2 Loggerインスタンスの取得とログの出力ステートメント |
log4netでログを出力するには、
| |
| リスト3 ログ出力のコード例 |
という具合に、logオブジェクトのメソッド(Fatal、Error、Info、Debug、Warnなど)を呼び出します。このとき引数として指定できるのは、文字列もしくは例外オブジェクトです。log4netでは、ログのレベルを5段階に分けており(DEBUG < INFO < WARN < ERROR < FATAL)、それぞれに対応したログ出力のメソッドが用意されています。
後述しますが、どのレベルのログを出力するかを構成ファイルで指定することで、ログの出力内容をコントロールできます。つまり、デバッグ時はすべてのログを出力し、リリース後はログのレベルがERROR以上だけを出力する(log.Errorメソッドとlog.Fatalメソッドのみを有効にする)といったことが可能です。
■ビルド
ビルドの際に特別な作業はありません。参照設定に追加したlog4net.dllがビルド後にbin\Debug(リリース・ビルドではbin\Release)にコピーされていることが確認できれば問題ありません。log4net.dllがDebugフォルダにコピーされていない場合は、log4netの参照プロパティの「ローカルコピー」がTrueになっているかを確認してみてください。
また、「log4netのスキーマ情報が見つかりませんでした」というエラー・メッセージが表示される場合がありますが、この場合は、まずソース・ファイルにコンパイル・エラーがないかを確認してみてください。
■出力されたログを確認
以上の作業でlog4netによるログ出力を行うサンプル・プログラムが実行できるようになりました。実際に実行してみると、次のリスト4のような内容のログ・ファイル「C:\log-file.txt」が作成されます。
| |
| リスト4 log4netによりファイルに出力されたログの例 |
出力されたログには、ソース・コード上で引数として指定した文字列に加えて、日付やクラス名なども含まれているのが分かります。このログの書式については後述しますが、ユーザー名、ファイル名などをログに含めることも可能です。
| INDEX | ||
| VBで実践! 外部コンポーネント活用術 | ||
| オープンソースのロギング・サービス「log4net」を使う | ||
| 1.log4netを使ったサンプルを作ってみる | ||
| 2.log4netの特徴/log4netの構成 | ||
| 3.アペンダの設定例 | ||
| 4.Webアプリケーションでログ作成 | ||
| 「VBで実践! 外部コンポーネント活用術」 |
ホワイトペーパー(TechTargetジャパン)
- .NET TIPS - .NET開発のテクニックとヒント集 - (2010/3/18)
− GridViewコントロールを階層表示させるには?
− Windowsフォームのボタンに画像を表示するには?
− C#でnullチェックを簡潔に行うには? - Chapter15:LINQとクエリ式 (2010/3/17)
C# 3.0の目玉機能であるLINQについて、さまざまな記述例を交えながら徹底解説。書籍『[完全版]究極のC#プログラミング』より転載 - VBラムダ式 基礎文法最速マスター (2010/3/16)
今度はVB。ラムダ式の基礎文法を、短い説明と簡単なコードでまとめる。「ラムダ式、どう書くんだっけ?」という場合の簡易リファレンスとして活用できる - ASP.NET MVC 2がリリース (2010/3/15)
ASP.NET MVC 2の正式版(VS 2008のASP.NET 3.5向け、VS 2010には標準で含まれる予定)のリリースについてのお知らせ
|
|
スキルアップ/キャリアアップ(JOB@IT)
は.NET開発者中心に生まれ変わりました
スポンサーからのお知らせ
.NET開発者中心コーナー
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |









