Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Win32::EventLog not returning all events?

by Anonymous Monk
on Oct 13, 2011 at 09:09 UTC ( #931171=note: print w/ replies, xml ) Need Help??


in reply to Win32::EventLog not returning all events?

For some hints see http://www.le-berre.com/perl/perldoc.htm#Hacks and Help understanding Win32::Eventlog

And see this, seems to work :) its a start, definitely an improvement over raw Win32::EventLog but it does need some flushing out

#!/usr/bin/perl -- use strict; use warnings; use Data::Dumper; Main( @ARGV ); exit( 0 ); sub Main { my $e = MyEventLog->new("Application"); print DD( { $e->First } ); my $rec = $e->Last ; print DD( $rec ); print DD( { $rec->Prev } ); } sub DD { Data::Dumper->new([@_])->Useqq(1)->Dump; } BEGIN { package MyEventLog::Entry; use Scalar::Util qw' weaken '; $INC{'MyEventLog/Entry.pm'} = __FILE__; sub new { my( $class, $parent, $self ) = @_; $self->{MyEventLog} = $parent; weaken $self->{MyEventLog} ; return bless $self, $class; } sub Prev { # sub Previous { my( $self ) = @_; return $self->{MyEventLog}->Get( $self->{RecordNumber} - 1 ); } sub Next { # sub Nextious { my( $self ) = @_; return $self->{MyEventLog}->Get( $self->{RecordNumber} + 1 ); } package MyEventLog; use Win32::EventLog; $INC{'MyEventLog.pm'} = __FILE__; sub new { my( $package, $eventLog , $computerName ) = @_; $computerName ||= $ENV{ComputerName}; my $handle=Win32::EventLog->new($eventLog, $computerName) or die "Can't open Application EventLog\n"; my $recs; $handle->GetNumber($recs) or die "Can't get number of EventLog records\n"; my $base; $handle->GetOldest($base) or die "Can't get number of oldest EventLog record\n"; return bless { handle => $handle, recs => $recs, base => $base, GetMessageText => !!1, }, $package; } sub Add { die "todo , # update recs" } sub First { return shift->GetNth( 0 ); } sub Last { return shift->GetNth( -1 ); } sub GetNth { my( $self, $ix ) = @_; if( $ix < 0 ){ $ix += 1 + $self->{recs}; } else { $ix += $self->{base}; } return $self->Get( $ix ); } sub Get { my( $self, $ix ) = @_; local $Win32::EventLog::GetMessageText = $self->{GetMessageTex +t}; my $hashRef = {}; $self->{handle}->Read( Win32::EventLog::EVENTLOG_FORWARDS_READ() | Win32::EventLog::EVENTLOG_SEEK_READ() , $ix, $hashRef ) or die "Can't read EventLog entry #$ix\n"; return %$hashRef if wantarray; return MyEventLog::Entry->new( $self => $hashRef ); } 1; } __END__

Don't ask me to explain anything, instead read Modern Perl: the free book


Comment on Re: Win32::EventLog not returning all events?
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://931171]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (5)
As of 2014-07-12 00:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (238 votes), past polls