BiliHelper-personal/src/core/Log.php
2021-04-06 19:33:36 +08:00

118 lines
3.7 KiB
PHP

<?php
/**
* Website: https://mudew.com/
* Author: Lkeme
* License: The MIT License
* Email: Useri@live.cn
* Updated: 2021 ~ 2022
*/
namespace BiliHelper\Core;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Bramus\Monolog\Formatter\ColoredLineFormatter;
class Log
{
protected static $instance;
static public function getLogger()
{
if (!self::$instance) {
self::configureInstance();
}
return self::$instance;
}
private static function configureInstance()
{
$logger = new Logger('BH');
$handler = new StreamHandler('php://stdout', getenv('APP_DEBUG') == 'true' ? Logger::DEBUG : Logger::INFO);
$handler->setFormatter(new ColoredLineFormatter());
$logger->pushHandler($handler);
self::$instance = $logger;
}
private static function prefix()
{
if (getenv('APP_MULTIPLE') == 'true') {
return '[' . (empty($t = getenv('APP_USER_IDENTITY')) ? getenv('APP_USER') : $t) . ']';
}
return '';
}
private static function writeLog($type, $message)
{
if (getenv('APP_WRITE_LOG') == 'true') {
if ($type == 'DEBUG' && getenv("APP_DEBUG") != 'true') {
return;
}
$path = './' . getenv("APP_LOG_PATH") . '/';
if (!file_exists($path)) {
mkdir($path);
chmod($path, 0777);
}
$filename = $path . getenv('APP_USER') . ".log";
$date = date('[Y-m-d H:i:s] ');
$data = $date . ' Log.' . $type . ' ' . $message . PHP_EOL;
file_put_contents($filename, $data, FILE_APPEND);
}
}
private static function backtrace(): string
{
$backtraces = debug_backtrace();
return "(" . pathinfo(basename($backtraces[1]['file']))['filename'] . ") => ";
}
public static function debug($message, array $context = [])
{
self::writeLog('DEBUG', $message);
self::getLogger()->addDebug($message, $context);
}
public static function info($message, array $context = [])
{
$message = self::prefix() . self::backtrace() . $message;
self::writeLog('INFO', $message);
self::getLogger()->addInfo($message, $context);
self::callback(Logger::INFO, 'INFO', $message);
}
public static function notice($message, array $context = [])
{
$message = self::prefix() . self::backtrace() . $message;
self::writeLog('NOTICE', $message);
self::getLogger()->addNotice($message, $context);
self::callback(Logger::NOTICE, 'NOTICE', $message);
}
public static function warning($message, array $context = [])
{
$message = self::prefix() . self::backtrace() . $message;
self::writeLog('WARNING', $message);
self::getLogger()->addWarning($message, $context);
self::callback(Logger::WARNING, 'WARNING', $message);
}
public static function error($message, array $context = [])
{
$message = self::prefix() . self::backtrace() . $message;
self::writeLog('ERROR', $message);
self::getLogger()->addError($message, $context);
self::callback(Logger::ERROR, 'ERROR', $message);
}
public static function callback($levelId, $level, $message)
{
$callback_level = (('APP_CALLBACK_LEVEL') == '') ? (Logger::ERROR) : intval(getenv('APP_CALLBACK_LEVEL'));
if ($levelId >= $callback_level) {
$url = str_replace('{account}', self::prefix(), getenv('APP_CALLBACK'));
$url = str_replace('{level}', $level, $url);
$url = str_replace('{message}', urlencode($message), $url);
Curl::request('get', str_replace(' ', '%20', $url));
}
}
}