improve and fix logging
This commit is contained in:
parent
8a71719c9c
commit
a2d9f93ad9
@ -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,
|
||||
];
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user