Merge pull request #2116 from connortechnology/fix_perl_logging
when detecting a down db connection, need to clear the stored sth as …pull/2122/head
commit
74a44869cf
|
@ -279,6 +279,9 @@ sub initialise( @ ) {
|
||||||
|
|
||||||
$this->{initialised} = !undef;
|
$this->{initialised} = !undef;
|
||||||
|
|
||||||
|
# this function can get called on a previously initialized log Object, so clean any sth's
|
||||||
|
$this->{sth} = undef;
|
||||||
|
|
||||||
Debug( 'LogOpts: level='.$codes{$this->{level}}
|
Debug( 'LogOpts: level='.$codes{$this->{level}}
|
||||||
.'/'.$codes{$this->{effectiveLevel}}
|
.'/'.$codes{$this->{effectiveLevel}}
|
||||||
.', screen='.$codes{$this->{termLevel}}
|
.', screen='.$codes{$this->{termLevel}}
|
||||||
|
@ -320,6 +323,8 @@ sub reinitialise {
|
||||||
my $screenLevel = $this->termLevel();
|
my $screenLevel = $this->termLevel();
|
||||||
$this->termLevel(NOLOG);
|
$this->termLevel(NOLOG);
|
||||||
$this->termLevel($screenLevel) if $screenLevel > NOLOG;
|
$this->termLevel($screenLevel) if $screenLevel > NOLOG;
|
||||||
|
|
||||||
|
$this->{sth} = undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Prevents undefined logging levels
|
# Prevents undefined logging levels
|
||||||
|
@ -549,30 +554,34 @@ sub logPrint {
|
||||||
print(STDERR $message) if $level <= $this->{termLevel};
|
print(STDERR $message) if $level <= $this->{termLevel};
|
||||||
|
|
||||||
if ( $level <= $this->{databaseLevel} ) {
|
if ( $level <= $this->{databaseLevel} ) {
|
||||||
if ( ( $this->{dbh} and $this->{dbh}->ping() ) or ( $this->{dbh} = ZoneMinder::Database::zmDbConnect() ) ) {
|
if ( ! ( $this->{dbh} and $this->{dbh}->ping() ) ) {
|
||||||
|
$this->{sth} = undef;
|
||||||
|
if ( ! ( $this->{dbh} = ZoneMinder::Database::zmDbConnect() ) ) {
|
||||||
my $sql = 'INSERT INTO Logs ( TimeKey, Component, Pid, Level, Code, Message, File, Line ) VALUES ( ?, ?, ?, ?, ?, ?, ?, NULL )';
|
print(STDERR "Can't log to database: ");
|
||||||
$this->{sth} = $this->{dbh}->prepare_cached($sql) if ! $this->{sth};
|
|
||||||
if ( !$this->{sth} ) {
|
|
||||||
$this->{databaseLevel} = NOLOG;
|
$this->{databaseLevel} = NOLOG;
|
||||||
Error("Can't prepare log entry '$sql': ".$this->{dbh}->errstr());
|
return;
|
||||||
} else {
|
|
||||||
my $res = $this->{sth}->execute($seconds+($microseconds/1000000.0)
|
|
||||||
, $this->{id}
|
|
||||||
, $$
|
|
||||||
, $level
|
|
||||||
, $code
|
|
||||||
, $string
|
|
||||||
, $this->{fileName}
|
|
||||||
);
|
|
||||||
if ( !$res ) {
|
|
||||||
$this->{databaseLevel} = NOLOG;
|
|
||||||
Error("Can't execute log entry '$sql': ".$this->{dbh}->errstr());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
print(STDERR "Can't log to database: ");
|
|
||||||
|
my $sql = 'INSERT INTO Logs ( TimeKey, Component, Pid, Level, Code, Message, File, Line ) VALUES ( ?, ?, ?, ?, ?, ?, ?, NULL )';
|
||||||
|
$this->{sth} = $this->{dbh}->prepare_cached($sql) if ! $this->{sth};
|
||||||
|
if ( !$this->{sth} ) {
|
||||||
|
$this->{databaseLevel} = NOLOG;
|
||||||
|
Error("Can't prepare log entry '$sql': ".$this->{dbh}->errstr());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $res = $this->{sth}->execute($seconds+($microseconds/1000000.0)
|
||||||
|
, $this->{id}
|
||||||
|
, $$
|
||||||
|
, $level
|
||||||
|
, $code
|
||||||
|
, $string
|
||||||
|
, $this->{fileName}
|
||||||
|
);
|
||||||
|
if ( !$res ) {
|
||||||
|
$this->{databaseLevel} = NOLOG;
|
||||||
|
Error("Can't execute log entry '$sql': ".$this->{dbh}->errstr());
|
||||||
}
|
}
|
||||||
} # end if doing db logging
|
} # end if doing db logging
|
||||||
} # end if level < effectivelevel
|
} # end if level < effectivelevel
|
||||||
|
|
Loading…
Reference in New Issue