mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-23 15:18:58 +01:00
improve logging of updating SQL statements to given table(s)
This commit is contained in:
parent
a7ba4c0727
commit
22954466c8
@ -110,11 +110,17 @@ class Db
|
|||||||
var $Debug = 0;
|
var $Debug = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log update querys to error_log
|
* Log update queries to error_log or file given below
|
||||||
*
|
*
|
||||||
* @var boolean
|
* @var boolean|string|string[] true: all tables, table-name(s) or false: disabled
|
||||||
*/
|
*/
|
||||||
var $log_updates = false;
|
var $log_updates = false;
|
||||||
|
/**
|
||||||
|
* Only log update from given table(s)
|
||||||
|
*
|
||||||
|
* @var string|null string with filename eg. /var/lib/egroupware/sql-update.log or null to use error_log
|
||||||
|
*/
|
||||||
|
var $log_updates_to;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array $Record current record
|
* @var array $Record current record
|
||||||
@ -766,9 +772,25 @@ class Db
|
|||||||
{
|
{
|
||||||
$num_rows = $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'];
|
$num_rows = $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'];
|
||||||
}
|
}
|
||||||
if (($this->readonly || $this->log_updates) && !preg_match('/^\(?(SELECT|SET|SHOW)/i', $Query_String))
|
if (($this->readonly || $this->log_updates === true) && !preg_match('/^\(?(SELECT|SET|SHOW)/i', $Query_String))
|
||||||
{
|
{
|
||||||
if ($this->log_updates) error_log($Query_String.': '.function_backtrace());
|
if ($this->log_updates === true)
|
||||||
|
{
|
||||||
|
$msg = $Query_String."\n".implode("\n", array_map(static function($level)
|
||||||
|
{
|
||||||
|
$args = substr(json_encode($level['args'], JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE), 1, -1);
|
||||||
|
if (strlen($args) > 120) $args = substr($args, 0, 120).'...';
|
||||||
|
return str_replace(EGW_SERVER_ROOT.'/', '', $level['file']).'('.$level['line'].'): '.
|
||||||
|
(empty($level['class']) ? '' : str_replace('EGroupware\\', '', $level['class']).$level['type']).$level['function'].'('.$args.')';
|
||||||
|
}, debug_backtrace()));
|
||||||
|
|
||||||
|
if (!empty($this->log_updates_to))
|
||||||
|
{
|
||||||
|
$msg = date('Y-m-d H:i:s: ').$_SERVER['REQUEST_METHOD'].' '.Framework::getUrl($_SERVER['REQUEST_URI'])."\n".$msg."\n".
|
||||||
|
'User: '.$GLOBALS['egw_info']['user']['account_lid'].', User-agent: '.$_SERVER['HTTP_USER_AGENT']."\n\n";
|
||||||
|
}
|
||||||
|
error_log($msg, empty($this->log_updates_to) ? 0 : 3, $this->log_updates_to);
|
||||||
|
}
|
||||||
if ($this->readonly)
|
if ($this->readonly)
|
||||||
{
|
{
|
||||||
$this->Error = 'Database is readonly';
|
$this->Error = 'Database is readonly';
|
||||||
@ -973,7 +995,7 @@ class Db
|
|||||||
*/
|
*/
|
||||||
function affected_rows()
|
function affected_rows()
|
||||||
{
|
{
|
||||||
if ($this->log_updates) return 0;
|
if ($this->readonly) return 0;
|
||||||
|
|
||||||
if (!$this->Link_ID && !$this->connect())
|
if (!$this->Link_ID && !$this->connect())
|
||||||
{
|
{
|
||||||
@ -1963,7 +1985,15 @@ class Db
|
|||||||
{
|
{
|
||||||
$sql = "$cmd INTO $table ".$this->column_data_implode(',',$data,'VALUES',true,$table_def['fd']).$sql_append;
|
$sql = "$cmd INTO $table ".$this->column_data_implode(',',$data,'VALUES',true,$table_def['fd']).$sql_append;
|
||||||
}
|
}
|
||||||
if ($this->Debug) echo "<p>db::insert('$table',".print_r($data,True).",".print_r($where,True).",$line,$file,'$app') sql='$sql'</p>\n";
|
|
||||||
|
if (!is_bool($this->log_updates) && in_array($table, (array)$this->log_updates))
|
||||||
|
{
|
||||||
|
$backup = $this->log_updates;
|
||||||
|
$this->log_updates = true;
|
||||||
|
$ret = $this->query($sql,$line,$file,0,-1,$inputarr);
|
||||||
|
$this->log_updates = $backup;
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
return $this->query($sql,$line,$file,0,-1,$inputarr);
|
return $this->query($sql,$line,$file,0,-1,$inputarr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2041,7 +2071,17 @@ class Db
|
|||||||
$sql = "UPDATE $table SET ".
|
$sql = "UPDATE $table SET ".
|
||||||
$this->column_data_implode(',',$data,True,true,$table_def['fd']).' WHERE '.$where_str;
|
$this->column_data_implode(',',$data,True,true,$table_def['fd']).' WHERE '.$where_str;
|
||||||
}
|
}
|
||||||
$ret = $this->query($sql,$line,$file,0,-1,$inputarr);
|
if (!is_bool($this->log_updates) && in_array($table, (array)$this->log_updates))
|
||||||
|
{
|
||||||
|
$backup = $this->log_updates;
|
||||||
|
$this->log_updates = true;
|
||||||
|
$ret = $this->query($sql,$line,$file,0,-1,$inputarr);
|
||||||
|
$this->log_updates = $backup;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$ret = $this->query($sql,$line,$file,0,-1,$inputarr);
|
||||||
|
}
|
||||||
if ($this->Debug) echo "<p>db::query('$sql',$line,$file)</p>\n";
|
if ($this->Debug) echo "<p>db::query('$sql',$line,$file)</p>\n";
|
||||||
}
|
}
|
||||||
// if we have any blobs to update, we do so now
|
// if we have any blobs to update, we do so now
|
||||||
@ -2081,6 +2121,14 @@ class Db
|
|||||||
$sql = "DELETE FROM $table WHERE ".
|
$sql = "DELETE FROM $table WHERE ".
|
||||||
$this->column_data_implode(' AND ',$where,True,False,$table_def['fd']);
|
$this->column_data_implode(' AND ',$where,True,False,$table_def['fd']);
|
||||||
|
|
||||||
|
if (!is_bool($this->log_updates) && in_array($table, (array)$this->log_updates))
|
||||||
|
{
|
||||||
|
$backup = $this->log_updates;
|
||||||
|
$this->log_updates = true;
|
||||||
|
$ret = $this->query($sql,$line,$file);
|
||||||
|
$this->log_updates = $backup;
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
return $this->query($sql,$line,$file);
|
return $this->query($sql,$line,$file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user