our
$VERSION
=
'0.01'
;
my
%logger_types
= (
'syslog'
=>
'/var/run/syslogd.pid'
,
'syslogng'
=>
'/var/run/syslog-ng.pid'
);
sub
new{
my
$package
=
shift
;
my
$options
=
shift
;
my
$self
= {};
bless
$self
,
$package
;
foreach
my
$option
(
keys
%{
$options
}){
$self
->{
$option
} =
$options
->{
$option
};
}
$self
->_check_logger();
return
$self
;
}
sub
tail {
my
$self
=
shift
;
my
$options
=
shift
;
$self
->{
'number_lines'
} = 50;
foreach
my
$option
(
keys
%{
$options
}){
$self
->{
$option
} =
$options
->{
$option
};
}
$self
->_parse_config();
if
(
$self
->{
'output_file'
}){
system
(
"tail -n$self->{'number_lines'} $self->{'syslog_file'} > $self->{'output_file'}"
);
}
else
{
system
(
"tail -n$self->{'number_lines'} $self->{'syslog_file'}"
);
}
if
( $? == 0 ){
return
1;
}
}
sub
copy {
my
$self
=
shift
;
my
$options
=
shift
;
$self
->_parse_config();
foreach
my
$option
(
keys
%{
$options
}){
$self
->{
$option
} =
$options
->{
$option
};
}
unless
(
$self
->{
'output_file'
}) {
$self
->{
'output_file'
} =
'syslog.txt'
;}
system
(
"cp $self->{'syslog_file'} $self->{'output_file'}"
);
if
( $? == 0 ){
return
1;
}
}
sub
_check_logger{
my
$self
=
shift
;
foreach
$key
(
keys
%logger_types
){
if
( -e
$logger_types
{
$key
}){
my
$pkg
=
'Sys::SyslogMessages::'
.
$key
;
bless
$self
,
$pkg
;
$self
->{
'logger'
} =
$key
;
return
;
}
}
}
use
base Sys::SyslogMessages;
sub
_parse_config{
my
$self
=
shift
;
$self
->{
'syslog_config'
} =
'/etc/syslog.conf'
;
open
FH,
$self
->{
'syslog_config'
};
while
(<FH>){
next
if
$_
=~ m/^
next
if
$_
=~ m/^\n$/;
chomp
$_
;
if
(
$_
=~ m/\*\.(\*|info)/){
(
$self
->{
'syslog_file'
}) =
$_
=~ m/\*\.\*.*\s+\-?(\/.*)/;
close
FH;
return
;
}
}
close
FH;
}
use
base Sys::SyslogMessages;
sub
_parse_config{
my
$self
=
shift
;
$self
->{
'syslog_config'
} =
'/etc/syslog-ng/syslog-ng.conf'
;
open
FH,
$self
->{
'syslog_config'
};
while
(<FH>){
next
if
$_
=~ m/^
next
if
$_
=~ m/^\n$/;
chomp
$_
;
if
(
$_
=~ m/destination\s+messages.
*file
/){
(
$self
->{
'syslog_file'
}) =
$_
=~ m/destination\s+messages.
*file
\(\s*(?:\'|\")(.*)(?:\'|\")/;
}
}
close
FH;
}
1;