毎日いろんな処理のためにPerlで書いたスクリプトを走らせているわけですが(データをバックアップしたり、ログを取ってきたり)、何か問題があったときはきちんと報告するような仕組みを作りたい、という事で色々試行錯誤していたわけですが
「てーか、Windowsならイベントログに書き込めばいいじゃん」
という事に気付きまして、Win32::EventLogを使ってイベントログに書き込むことにしました。



が、これが予想以上に曲者でして…(汗


まずはサンプルソース。



use Win32::EventLog;
use strict;

my $obj_eventlog=Win32::EventLog->new('PerlScript');
my %event=(
'EventType'=>EVENTLOG_INFORMATION_TYPE,
'EventID'=>'117',
'Strings'=>'This is a String',
'Data'=>'This is data!'
);
$obj_eventlog->Report(\%event);

こんな感じでソースを書いてとりあえず走らせてみると…


Event



とイベントログに記録はされるのですが、説明のところに余計なメッセージが…。


これは要するにイベントIDに対応する説明が見つかりませんよー、という事だそうで。でイベントIDに対応する説明をくっつけてやる方法というのが高橋基信さんのWebサイトに掲載(NTイベントログに、任意のソースで任意のイベントIDのメッセージを出力する)されていました。


よっしゃこれで大丈夫…と思ったのですが、dllを置いてレジストリに書き込んでやっても、やはり上のようなメッセージが('A`) 不思議な事に高橋さんのページに掲載されているlogwrite.exeを使うと、きちんと余計なメッセージが記録される事無くイベントログに書き込めるんですよね…。


無論イベントログに書き込む、という目標自体は達成できたのでいいはいいんですが…うーん。