novaconium/src/Logger.php

54 lines
1.3 KiB
PHP

<?php
class Logger {
protected string $logFile;
protected int $logLevelThreshold;
const LEVELS = [
'DEBUG' => 0,
'INFO' => 1,
'WARNING' => 2,
'ERROR' => 3,
'NONE' => 999
];
public function __construct(string $logFile, string $minLevel = 'DEBUG') {
$this->logFile = $logFile;
$minLevel = strtoupper($minLevel);
$this->logLevelThreshold = self::LEVELS[$minLevel] ?? 0;
}
protected function log(string $level, string $message): void {
$level = strtoupper($level);
if (!isset(self::LEVELS[$level]) || self::LEVELS[$level] < $this->logLevelThreshold) {
return;
}
$time = date('Y-m-d H:i:s');
$ip = $_SERVER['REMOTE_ADDR'];
$logEntry = "[$time] [$ip] [$level] $message" . PHP_EOL;
file_put_contents($this->logFile, $logEntry, FILE_APPEND | LOCK_EX);
}
public function debug(string $msg): void {
$this->log('DEBUG', $msg);
}
public function info(string $msg): void {
$this->log('INFO', $msg);
}
public function warning(string $msg): void {
$this->log('WARNING', $msg);
}
// Alias
public function warn(string $msg): void {
$this->log('WARNING', $msg);
}
public function error(string $msg): void {
$this->log('ERROR', $msg);
}
}