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

View File

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