diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2024-01-29 11:41:45 +0100 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2024-01-30 10:31:03 +0100 |
commit | 911ab393c07d7e2f29e8949d422b122ca91be354 (patch) | |
tree | 1aada03b8bc7c715838f11cf5cb2f2c33962c774 | |
parent | 063c051cdcfbaf1f623337f6f1239438b35d094c (diff) | |
download | nextcloud-server-911ab393c07d7e2f29e8949d422b122ca91be354.tar.gz nextcloud-server-911ab393c07d7e2f29e8949d422b122ca91be354.zip |
feat(db): Make dirty query logging available in production
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
-rw-r--r-- | config/config.sample.php | 9 | ||||
-rw-r--r-- | lib/private/DB/Connection.php | 10 |
2 files changed, 18 insertions, 1 deletions
diff --git a/config/config.sample.php b/config/config.sample.php index 24bed544692..d999b1e39b0 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -995,6 +995,15 @@ $CONFIG = [ 'loglevel_frontend' => 2, /** + * Loglevel used by the dirty database query detection. Useful to identify + * potential database bugs in production. Set this to loglevel or higher to + * see dirty queries in the logs. + * + * Defaults to ``0`` (debug) + */ +'loglevel_dirty_database_queries' => 0, + +/** * If you maintain different instances and aggregate the logs, you may want * to distinguish between them. ``syslog_tag`` can be set per instance * with a unique id. Only available if ``log_type`` is set to ``syslog`` or diff --git a/lib/private/DB/Connection.php b/lib/private/DB/Connection.php index 09c321aedb8..5affa2c3d48 100644 --- a/lib/private/DB/Connection.php +++ b/lib/private/DB/Connection.php @@ -276,7 +276,15 @@ class Connection extends PrimaryReadReplicaConnection { } else { // Read to a table that has been written to previously // While this might not necessarily mean that we did a read after write it is an indication for a code path to check - $this->logger->debug('dirty table reads: ' . $sql, ['tables' => $this->tableDirtyWrites, 'reads' => $tables, 'exception' => new \Exception()]); + $this->logger->log( + (int) ($this->systemConfig->getValue('loglevel_dirty_database_queries', null) ?? 0), + 'dirty table reads: ' . $sql, + [ + 'tables' => $this->tableDirtyWrites, + 'reads' => $tables, + 'exception' => new \Exception(), + ], + ); } $sql = $this->replaceTablePrefix($sql); |