Perl 访问 Windows 的事件日志

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

#!/usr/bin/perl -w
use Win32::EventLog;
$area = 'System';  # Default
$host = $ENV{'ComputerName'};

$log_handle = Win32::EventLog->new($area,$host)or die "Cannot open $area event log $!\n";

$log_handle->GetOldest($record_base) or die "Error getting oldest record,$!\n";

$log_handle->GetNumber($num_records) or die "Error getting number records,$!\n";

for ($rec = 0; $rec < $num_records; $rec++ ) {
    $log_handle->Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,$record_base + $rec,\%hash)or die "Cannot read event log entry $rec,$!\n";
    print_error_log( \%hash );
}

$log_handle->Close();

sub print_error_log {
    my($hash_ref) = $_[0];
    my(%hash) = %$hash_ref;
    my($time_str);
    my($time_value);

    if ( exists( $hash{'EventType'} ) ) {
        if ( $hash{'EventType'} eq EVENTLOG_ERROR_TYPE ) {
            my($source) = $hash{'Source'};
            $time_value = $hash{'TimeGenerated'};
            $time_str = localtime( $time_value );
            my($rec_number) = $hash{'RecordNumber'};
            my($msg) =Win32::EventLog::GetMessageText( \%hash );
            if (defined($msg) ) {
                print "    $rec_number $source $time_str\n";
                print "$msg\n";
            } else {
                # Print raw strings used to create message.
                print "    $rec_number $source $time_str\n";
                print "$hash{'Strings'}";
            }
        }
    }
}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...