燈明ブログ

現状は小池啓仁の応援ブログ

イベントログへメッセージ出力

CGIとか裏で動くプログラムは、画面やログファイルにエラーやワーニングの情報を出力できないケースがあったりします。
そんな時は、イベントログへ出力すればラクチンです。まぁ For Windowsですが・・・。
以下はそのサンプルです。

サンプルソース

use strict;

OutEventlog('Test Perl', 'テストです!');

sub OutEventlog {
    my ($source_name, $log_data) = @_;
    system("eventcreate /T WARNING /ID 1 /L Application /SO \"$source_name\" /D \"$log_data\"");
}

◆eventcreateコマンドヘルプ引用

EVENTCREATE [/S システム [/U ユーザー名 [/P [パスワード]]]] /ID イベントID
            [/L ログ名] [/SO ソース名] /T 種類 /D 説明

説明:
    このコマンド ライン ツールで管理者が指定のイベント ログに
    カスタム イベントを作成します。

パラメータ一覧:
    /S         システム             接続先のリモート システムを指定します。

    /U        [ドメイン\]ユーザー   コマンドが実行されるユーザー
                                    コンテキストを指定します。

    /P         パスワード           指定のユーザー コンテキストの
                                    パスワードを指定します。

    /L         ログ名               イベントを作成する先のイベント
                                    ログを指定します。

    /T         種類                 作成するイベントの種類を指定します。
                                    有効な種類: ERROR、WARNING、INFORMATION

    /SO        ソース               イベントに使用するためのソースを指定しま
                                    す。ソースにはどの文字列を指定しても有効 
                                    であり、イベントを作成するアプリケーショ 
                                    ンまたはコンポーネントを示すものです。

    /ID        ID                   イベントに対するイベント ID を指定しま
                                    す。1 から 1000 の範囲のどの数字も有効
                                    です。

    /D         説明                 新しく作成するイベントに対して設定する説
                                    明文を指定します。

    /?                              ヘルプまたは使用法を表示します。


例:
    EVENTCREATE /T ERROR /ID 100
        /L APPLICATION /D "アプリケーション ログにイベントを作成"

    EVENTCREATE /T ERROR /ID 999 /L APPLICATION
        /SO WinWord /D "アプリケーション ログの新しいソース Winword"

    EVENTCREATE /S system /T ERROR /ID 100
        /L APPLICATION /D "ユーザー資格情報のないリモート システム"

    EVENTCREATE /S system /U user /P password /ID 100 /T ERROR
        /L APPLICATION /D "ユーザー資格情報付きのリモート コンピュータ"

    EVENTCREATE /S system /U domain\user /ID 100 /T WARNING
        /SO MyBatchFile.cmd /D "メインテナンス スクリプト ユーザー ログオン失敗"