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