improve and fix logging

This commit is contained in:
E. S. 2024-08-23 02:24:10 +03:00
parent 8a71719c9c
commit a2d9f93ad9
2 changed files with 41 additions and 18 deletions

View File

@ -9,10 +9,20 @@ enum LogLevel: int {
case DEBUG = 2; case DEBUG = 2;
} }
function logDebug(...$args): void { global $__logger; $__logger->log(LogLevel::DEBUG, ...$args); } function logDebug(...$args): void { global $__logger; $__logger?->log(LogLevel::DEBUG, null, ...$args); }
function logInfo(...$args): void { global $__logger; $__logger->log(LogLevel::INFO, ...$args); } function logInfo(...$args): void { global $__logger; $__logger?->log(LogLevel::INFO, null, ...$args); }
function logWarning(...$args): void { global $__logger; $__logger->log(LogLevel::WARNING, ...$args); } function logWarning(...$args): void { global $__logger; $__logger?->log(LogLevel::WARNING, null, ...$args); }
function logError(...$args): void { global $__logger; $__logger->log(LogLevel::ERROR, ...$args); } function logError(...$args): void {
global $__logger;
if (array_key_exists('stacktrace', $args)) {
$st = $args['stacktrace'];
unset($args['stacktrace']);
} else {
$st = null;
}
if ($__logger?->canReport())
$__logger?->log(LogLevel::ERROR, $st, ...$args);
}
abstract class Logger { abstract class Logger {
protected bool $enabled = false; protected bool $enabled = false;
@ -52,6 +62,13 @@ abstract class Logger {
errline: $line); errline: $line);
}); });
set_exception_handler(function(\Throwable $e): void {
static::write(LogLevel::ERROR, get_class($e).': '.$e->getMessage(),
errfile: $e->getFile() ?: '?',
errline: $e->getLine() ?: 0,
stacktrace: $e->getTraceAsString());
});
register_shutdown_function(function () use ($self) { register_shutdown_function(function () use ($self) {
if (!$self->enabled || !($error = error_get_last())) if (!$self->enabled || !($error = error_get_last()))
return; return;
@ -70,13 +87,14 @@ abstract class Logger {
$error_handler_set = true; $error_handler_set = true;
} }
function log(LogLevel $level, ...$args): void { function log(LogLevel $level, ?string $stacktrace = null, ...$args): void {
if (!is_dev() && $level == LogLevel::DEBUG) if (!is_dev() && $level == LogLevel::DEBUG)
return; return;
$this->write($level, strVars($args)); $this->write($level, strVars($args),
stacktrace: $stacktrace);
} }
protected function canReport(): bool { function canReport(): bool {
return $this->recursionLevel < 3; return $this->recursionLevel < 3;
} }
@ -84,11 +102,12 @@ abstract class Logger {
string $message, string $message,
?int $errno = null, ?int $errno = null,
?string $errfile = null, ?string $errfile = null,
?string $errline = null): void { ?string $errline = null,
?string $stacktrace = null): void {
$this->recursionLevel++; $this->recursionLevel++;
if ($this->canReport()) if ($this->canReport())
$this->writer($level, $this->counter++, $message, $errno, $errfile, $errline); $this->writer($level, $this->counter++, $message, $errno, $errfile, $errline, $stacktrace);
$this->recursionLevel--; $this->recursionLevel--;
} }
@ -98,7 +117,8 @@ abstract class Logger {
string $message, string $message,
?int $errno = null, ?int $errno = null,
?string $errfile = null, ?string $errfile = null,
?string $errline = null): void; ?string $errline = null,
?string $stacktrace = null): void;
} }
class FileLogger extends Logger { class FileLogger extends Logger {
@ -110,7 +130,8 @@ class FileLogger extends Logger {
string $message, string $message,
?int $errno = null, ?int $errno = null,
?string $errfile = null, ?string $errfile = null,
?string $errline = null): void ?string $errline = null,
?string $stacktrace = null): void
{ {
if (is_null($this->logFile)) { if (is_null($this->logFile)) {
fprintf(STDERR, __METHOD__.': logfile is not set'); fprintf(STDERR, __METHOD__.': logfile is not set');
@ -157,7 +178,7 @@ class FileLogger extends Logger {
$buf .= $message."\n"; $buf .= $message."\n";
if (in_array($level, [LogLevel::ERROR, LogLevel::WARNING])) if (in_array($level, [LogLevel::ERROR, LogLevel::WARNING]))
$buf .= backtrace_as_string(2)."\n"; $buf .= ($stacktrace ?: backtrace_as_string(2))."\n";
$set_perm = false; $set_perm = false;
if (!file_exists($this->logFile)) { if (!file_exists($this->logFile)) {
@ -192,7 +213,8 @@ class DatabaseLogger extends Logger {
string $message, string $message,
?int $errno = null, ?int $errno = null,
?string $errfile = null, ?string $errfile = null,
?string $errline = null): void ?string $errline = null,
?string $stacktrace = null): void
{ {
global $AdminSession; global $AdminSession;
@ -202,12 +224,12 @@ class DatabaseLogger extends Logger {
'ts' => time(), 'ts' => time(),
'num' => $num, 'num' => $num,
'time' => exectime(), 'time' => exectime(),
'errno' => $errno, 'errno' => $errno ?: 0,
'file' => $errfile, 'file' => $errfile ?: '?',
'line' => $errline, 'line' => $errline ?: 0,
'text' => $message, 'text' => $message,
'level' => $level->value, 'level' => $level->value,
'stacktrace' => backtrace_as_string(2), 'stacktrace' => $stacktrace ?: backtrace_as_string(2),
'is_cli' => intval(is_cli()), 'is_cli' => intval(is_cli()),
'admin_id' => is_admin() ? $AdminSession->id : 0, 'admin_id' => is_admin() ? $AdminSession->id : 0,
]; ];

View File

@ -537,7 +537,8 @@ class AdminHandler extends request_handler {
$post = posts::add([ $post = posts::add([
'visible' => $visibility_enabled, 'visible' => $visibility_enabled,
'short_name' => $short_name, 'short_name' => $short_name,
'date' => $date 'date' => $date,
'source_url' => ''
]); ]);
if (!$post) if (!$post)