mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-11 13:40:07 +00:00
Handle multi-line log events.
This commit is contained in:
28
bin/pt-agent
28
bin/pt-agent
@@ -4922,9 +4922,18 @@ sub start_online_logging {
|
|||||||
my $lines = read_stdin($read_timeout);
|
my $lines = read_stdin($read_timeout);
|
||||||
last QUEUE unless $lines;
|
last QUEUE unless $lines;
|
||||||
LINE:
|
LINE:
|
||||||
foreach my $line ( @$lines ) {
|
while ( defined(my $line = shift @$lines) ) {
|
||||||
my ($ts, $level, $msg) = $line =~ m/^([^,]+),([^,]+),(.+)/s;
|
my ($ts, $level, $n_lines, $msg) = $line =~ m/^([^,]+),([^,]+),(.+)/s;
|
||||||
chomp $msg;
|
if ( !$ts || !$level || !$n_lines || !$msg ) {
|
||||||
|
warn "Invalid log entry: $line\n";
|
||||||
|
next LINE;
|
||||||
|
}
|
||||||
|
if ( $n_lines > 1 ) {
|
||||||
|
$n_lines--; # first line
|
||||||
|
for ( 1..$n_lines ) {
|
||||||
|
$msg .= shift @$lines;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
push @log_entries, Percona::WebAPI::Resource::LogEntry->new(
|
push @log_entries, Percona::WebAPI::Resource::LogEntry->new(
|
||||||
pid => $self->pid,
|
pid => $self->pid,
|
||||||
@@ -4950,7 +4959,7 @@ sub start_online_logging {
|
|||||||
@log_entries = ();
|
@log_entries = ();
|
||||||
}
|
}
|
||||||
} # have log entries
|
} # have log entries
|
||||||
} # QUEUE oktorun
|
} # LINE
|
||||||
|
|
||||||
if ( scalar @log_entries ) {
|
if ( scalar @log_entries ) {
|
||||||
my $ts = ts(time, 0); # 0=local time
|
my $ts = ts(time, 0); # 0=local time
|
||||||
@@ -5031,14 +5040,18 @@ sub _log {
|
|||||||
my $ts = ts(time, 1); # 1=UTC
|
my $ts = ts(time, 1); # 1=UTC
|
||||||
my $level_number = level_number($level);
|
my $level_number = level_number($level);
|
||||||
|
|
||||||
|
chomp($msg);
|
||||||
|
my $n_lines = 1;
|
||||||
|
$n_lines++ while $msg =~ m/\n/g;
|
||||||
|
|
||||||
if ( $self->online_logging ) {
|
if ( $self->online_logging ) {
|
||||||
while ( defined(my $log_entry = shift @{$self->_buffer}) ) {
|
while ( defined(my $log_entry = shift @{$self->_buffer}) ) {
|
||||||
$self->_queue_log_entry(@$log_entry);
|
$self->_queue_log_entry(@$log_entry);
|
||||||
}
|
}
|
||||||
$self->_queue_log_entry($ts, $level_number, $msg);
|
$self->_queue_log_entry($ts, $level_number, $n_lines, $msg);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
push @{$self->_buffer}, [$ts, $level_number, $msg];
|
push @{$self->_buffer}, [$ts, $level_number, $n_lines, $msg];
|
||||||
|
|
||||||
my $ts = ts(time, 0); # 0=local time
|
my $ts = ts(time, 0); # 0=local time
|
||||||
if ( $level_number >= 3 ) { # warning
|
if ( $level_number >= 3 ) { # warning
|
||||||
@@ -5054,8 +5067,7 @@ sub _log {
|
|||||||
|
|
||||||
sub _queue_log_entry {
|
sub _queue_log_entry {
|
||||||
my ($self, $ts, $log_level, $msg) = @_;
|
my ($self, $ts, $log_level, $msg) = @_;
|
||||||
$msg .= "\n" unless $msg =~ m/\n\Z/;
|
print "$ts,$log_level,$msg\n";
|
||||||
print "$ts,$log_level,$msg";
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -130,10 +130,19 @@ sub start_online_logging {
|
|||||||
my $lines = read_stdin($read_timeout);
|
my $lines = read_stdin($read_timeout);
|
||||||
last QUEUE unless $lines;
|
last QUEUE unless $lines;
|
||||||
LINE:
|
LINE:
|
||||||
foreach my $line ( @$lines ) {
|
while ( defined(my $line = shift @$lines) ) {
|
||||||
# $line = ts,level,message
|
# $line = ts,level,n_lines,message
|
||||||
my ($ts, $level, $msg) = $line =~ m/^([^,]+),([^,]+),(.+)/s;
|
my ($ts, $level, $n_lines, $msg) = $line =~ m/^([^,]+),([^,]+),(.+)/s;
|
||||||
chomp $msg;
|
if ( !$ts || !$level || !$n_lines || !$msg ) {
|
||||||
|
warn "Invalid log entry: $line\n";
|
||||||
|
next LINE;
|
||||||
|
}
|
||||||
|
if ( $n_lines > 1 ) {
|
||||||
|
$n_lines--; # first line
|
||||||
|
for ( 1..$n_lines ) {
|
||||||
|
$msg .= shift @$lines;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
push @log_entries, Percona::WebAPI::Resource::LogEntry->new(
|
push @log_entries, Percona::WebAPI::Resource::LogEntry->new(
|
||||||
pid => $self->pid,
|
pid => $self->pid,
|
||||||
@@ -159,7 +168,7 @@ sub start_online_logging {
|
|||||||
@log_entries = ();
|
@log_entries = ();
|
||||||
}
|
}
|
||||||
} # have log entries
|
} # have log entries
|
||||||
} # QUEUE oktorun
|
} # LINE
|
||||||
|
|
||||||
if ( scalar @log_entries ) {
|
if ( scalar @log_entries ) {
|
||||||
my $ts = ts(time, 0); # 0=local time
|
my $ts = ts(time, 0); # 0=local time
|
||||||
@@ -241,14 +250,18 @@ sub _log {
|
|||||||
my $ts = ts(time, 1); # 1=UTC
|
my $ts = ts(time, 1); # 1=UTC
|
||||||
my $level_number = level_number($level);
|
my $level_number = level_number($level);
|
||||||
|
|
||||||
|
chomp($msg);
|
||||||
|
my $n_lines = 1;
|
||||||
|
$n_lines++ while $msg =~ m/\n/g;
|
||||||
|
|
||||||
if ( $self->online_logging ) {
|
if ( $self->online_logging ) {
|
||||||
while ( defined(my $log_entry = shift @{$self->_buffer}) ) {
|
while ( defined(my $log_entry = shift @{$self->_buffer}) ) {
|
||||||
$self->_queue_log_entry(@$log_entry);
|
$self->_queue_log_entry(@$log_entry);
|
||||||
}
|
}
|
||||||
$self->_queue_log_entry($ts, $level_number, $msg);
|
$self->_queue_log_entry($ts, $level_number, $n_lines, $msg);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
push @{$self->_buffer}, [$ts, $level_number, $msg];
|
push @{$self->_buffer}, [$ts, $level_number, $n_lines, $msg];
|
||||||
|
|
||||||
my $ts = ts(time, 0); # 0=local time
|
my $ts = ts(time, 0); # 0=local time
|
||||||
if ( $level_number >= 3 ) { # warning
|
if ( $level_number >= 3 ) { # warning
|
||||||
@@ -264,8 +277,7 @@ sub _log {
|
|||||||
|
|
||||||
sub _queue_log_entry {
|
sub _queue_log_entry {
|
||||||
my ($self, $ts, $log_level, $msg) = @_;
|
my ($self, $ts, $log_level, $msg) = @_;
|
||||||
$msg .= "\n" unless $msg =~ m/\n\Z/;
|
print "$ts,$log_level,$msg\n";
|
||||||
print "$ts,$log_level,$msg";
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user