[System Environment] | ||||||||||||
イベント・ログに任意の文字列を出力する
|
||||||||||||
|
解説 |
Windowsマシン上で定期的に実施するシステム管理上のタスクは、可能な限りバッチ・ファイルやWSHを利用して自動化したい。また自動化を行うならば、動作の確認や障害発生に備えて、処理結果をログに出力したり、メールで送ったりしたい。
自前でログを作成するのはさほど難しい話ではない。だがログ・ファイルを格納する場所や書式が統一されていないと、事後確認が行いづらくなってしまう。
本TIPSでは、ログとして残したい内容をコマンドラインからイベント・ログに出力する方法をいくつか紹介する。Windows OSの標準機能であるイベント・ログに出力することにより、管理が容易になるというメリットがある。
操作方法 |
イベント・ログに書き込む方法
イベント・ログにユーザーがイベントを書き込む方法としては、次のような手段が利用できる。
- WSH(Windows Script Host)
- Eventcreateコマンド
- LogEventコマンド
- EventLogger(elogger.exe)コマンド
WSHを利用する方法
WSHを利用する方法は、既存のOS環境に対してアプリケーションを追加でインストールする必要がないので、最も広く利用できる方法だと思われる。WSHはWindows 2000以降のOSで利用可能だ。
次のサンプルを見てほしい。VBScriptで記述したコードである。
Const EVENT_SUCCESS = 0 ※この3行の内容を、例えばwsheventtest.vbsというファイル名で保存して、実行すること。 |
これを実行すると、次のようなイベント・ログが書き込まれる。
書き込まれたイベント・ログ | |||||||||
WSHから書き込んだイベント・ログの内容を表示させたところ。情報の種類は「なし」となっているが、イベント・ビューアの一覧では「情報」と表示される。 | |||||||||
|
ここではWscript.Shell(WshShell)オブジェクトの持つLogEventメソッドを使って、アプリケーション・ログに「WSH」をソースとして「情報」のエントリを書き込んでいる。
このLogEventメソッドを用いる場合、次の書式に従ってメッセージを構成する必要がある。「\\<コンピュータ名>」はリモート・コンピュータのログに書き込む際に指定するものであり、スクリプトを実行するローカルのコンピュータ上のログに書き込む場合は省略可能だ。
object.LogEvent(イベントの種類, メッセージ内容, \\<コンピュータ名>) |
イベントの種類は次の表に示すように、2進数で表記される。スクリプトの最初のパートで定数として宣言しておくとよいだろう。
種類 |
意味 |
0 |
成功 |
1 |
エラー |
2 |
警告 |
4 |
情報 |
8 |
成功の監査 |
16 |
失敗の監査 |
イベントの種類 | |
イベント・ログに書き込まれる種類。種類を「0」と指定すると、イベント・ビューアでは4と同じく「情報」として表示される。 |
|
WSHを使ったイベント・ログへの出力方法の詳細については、右の関連記事中にあるTIPSや連載WSH入門などを参照していただきたい。
Eventcreateコマンドを利用する方法
Windows XP/Windows Server 2003ではeventcreate.exeというコマンドを利用してイベント・ログへエントリを追加することができる。
例えば、次のような構文で書き込む内容を記述する。詳細はeventcreate /?で表示されるヘルプなどを参照のこと。
eventcreate /ID 100 /L system /SO Cmd /T Information /D "テストメッセージ" |
ここでは「イベントID」「書き込みを行うログ」「ソース」「種類」「メッセージ内容」を指定している。
LogEventを利用する方法
logevent.exeは、Windows NT 4.0およびWindows 2000のリソース・キットに収録されているツールである。コマンドラインからイベント・ログへエントリを追加することができる。
|
利用可能なオプションは、引数を付けずに入力すればヘルプが表示されるので、参照のこと。例えば次のように利用する。
logevent -s W -r test -c 5 -e 2 "テストイベント" |
-sオプションはイベントの種類、-rはソース、-cは分類、-eは指定したいイベントIDを示す。なお-cオプションで利用可能な分類には次の7つがあるようだ。
分類 |
意味 |
1 |
デバイス |
2 |
ディスク |
3 |
プリンタ |
4 |
サービス |
5 |
シェル |
6 |
システム イベント |
7 |
ネットワーク |
logeventの分類コード |
Eventloggerを利用する方法
Eventlogger(実行ファイル名はeLogger.exe)は、でんか氏が作成・公開しているツールである。
このツールは、GUI画面とコマンドラインの両方で利用できる。パラメータを何も付けずに起動すると、GUI画面が表示される。
Eventloggerの実行画面 | ||||||||||||||||||
イベント・ログに内容を書き込むツール。出力先はアプリケーション・ログのみのようである。 | ||||||||||||||||||
|
オプションを指定すると、コマンドラインからイベント・ログに書き込むことができる。-tオプションでは、次のものを指定可能だ。1〜4以外の数字を指定した場合は「情報」のログが書き込まれることになる。
種類 |
意味 |
1 |
警告 |
2 |
エラー |
3 |
成功の監査 |
4 |
失敗の監査 |
Eventloggerで指定できるイベントの種類 |
イベント・ログにメッセージを書き込む際の制限事項
ここでは、イベント・ログへの書き込みに関する制限事項についてまとめておく。
■書き込み先ログの種類
仕様上の制限として、セキュリティ・ログに書き込むことはできない。書き込めるのは「システム(System)」と「アプリケーション(Application)」ログのみである。詳しくはxcorp 氏の試行錯誤の結果である次の資料を参照していただきたい。
■1つのエントリに書き込めるサイズの制限
以下の「EventLog.WriteEntryメソッド」の解説(例外部分を参照)によると、それぞれのエントリのメッセージ部分は最大で16Kbytes(16384bytes)に制限されるようである。1つのエントリで書き込む内容はこのサイズを超えないように気を付けること。
■使用する文字列の制限
メッセージ中には“%数字”という文字列を含めないこと。これはOSがイベント・ログにエントリを作る際の処理ロジックに問題があり、メッセージ処理のループが発生するからである。手元で確認したところ、このような文字列を含めると、100回ほどのメッセージの繰り返しが見られた。
■「説明」に現れる、ソースとメッセージ・リソース・ファイルの組が登録されていないというエラーメッセージ
一般的には、ソースとそのソースに応じたメッセージ・リソースを格納したDLLの組がレジストリに登録されていないと、次の画面のようなエラー・メッセージが冒頭に表示される。
メッセージ・リソースが登録されていない場合のエラー | |||||||||
ソースとメッセージ・リソースがレジストリに登録されていないと、メッセージの冒頭部分にこのような“うるさい”エラーが書き込まれてしまう。このエラーを解消するには、上に紹介した中の方法ではWSHの利用を推奨する。Windows XP/Windows Server 2003ならば、OS標準のeventcreate.exeコマンドを用いてもよい。 | |||||||||
|
このメッセージは無視してよいものだが、気になるのであれば、次の情報を参考にしてメッセージ・リソースをDLLに格納し、ソースを登録すればよいだろう。なお、LogeventとEventloggerでは、別途メッセージ・リソースを登録してもこのメッセージが消えなかったことを追記しておく。
■
以上のように、イベント・ログにメッセージを書き込むのはさほど難しいことではなく、スクリプトやバッチ・ファイルから手軽に利用できることがお分かりいただけたことと思う。バッチ・ファイルやスクリプトを作成したり、既存のものの手直しを行う際、ぜひともログ出力をどうするかという点も検討してほしい。
関連記事 | ||
Windows TIPS:WSHコードで発生したエラー情報をイベント・ログに記録する(Windows Server Insider) | ||
連載WSH入門―第7回「1.アプリケーション・イベント・ログの作成」(Windows Server Insider) | ||
|
「Windows TIPS」 |
ホワイトペーパー(TechTargetジャパン)
- WindowsTIPS (2009/8/28)
− Office 97-2003形式の新規ファイルを作成する
− 企業対応の無償ウイルス対策ソフトウェアを利用する
− dvdburnで.ISOファイルをDVD-Rに書き込む - Windows 7はどんな新時代を切り開くのか? (2009/8/27)
次期クライアントOS「Windows 7」の新コーナーがスタート。Vistaの後継となる新OSの実力やいかに。今回はWindows 7の概要について解説 - 第186話 ハードディスクの一生 (2009/8/25)
年を追うごとに大容量・低価格化が急速に進むハードディスク。いやがうえにも新陳代謝が進む。現役を退いたディスクの末路は… - WindowsTIPS (2009/8/21)
− アドレス表記を変更してIEのゾーンを切り替える
− Windows 7がインストール可能かどうかをチェックする
− Windows 7のエクスペリエンス・インデックス(WEI)
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
お勧め求人情報
**先週の人気講座ランキング**
〜UNIX/Linux〜
◆ | テストツールを導入しても結果が伴わない なぜ? JaSSTメンバがその真相に迫る! New! |
◆ | UTMだからといってあきらめていませんか 境界防御はフルスペックのFW+IPSで臨め New! |
◆ | その日のうちに効果を実感できる WAN最適化アプライアンスのススメ New! |
◆ | クラウドとデータセンターの融合の中で、 失敗しないために必要な10の要件とは? |
◆ | これで分かる!「ログを使いこなす方法」 立ち見が出るほどの会場で語られたことは |
◆ | もう「ITリソースの過不足」に悩まない! “隣のサーバ”のメモリとCPUを活用せよ |
◆ | 経営コンサルの国家資格、中小企業診断士 ITエンジニアが注目するその理由とは? |
◆ | Javaの宿命、「Full GC」によるシステム 停止はどのようにしたら防げるだろうか? |
◆ | サービス開始の時のために覚えておきたい さくらインターネットの“価格破壊” |
◆ | これが最新のプロジェクト管理手法だ! 工事進行基準やコスト圧力に打ち勝つ方法 |