101 lines
3.1 KiB
PHP
101 lines
3.1 KiB
PHP
<?php
|
|
/**
|
|
* Centralized Logger for CRM Extensions
|
|
* Централизованная система логирования для всех доработок
|
|
*/
|
|
|
|
if (!class_exists('CRM_Logger')) {
|
|
class CRM_Logger {
|
|
const LEVEL_DEBUG = 0;
|
|
const LEVEL_INFO = 1;
|
|
const LEVEL_WARNING = 2;
|
|
const LEVEL_ERROR = 3;
|
|
|
|
private static $logLevel = self::LEVEL_INFO;
|
|
private static $logFile = null;
|
|
private static $initialized = false;
|
|
|
|
public static function init() {
|
|
if (self::$initialized) {
|
|
return;
|
|
}
|
|
|
|
require_once __DIR__ . '/EnvLoader.php';
|
|
EnvLoader::load();
|
|
|
|
$logLevelStr = EnvLoader::get('LOG_LEVEL', 'INFO');
|
|
self::$logLevel = self::parseLogLevel($logLevelStr);
|
|
|
|
$logDir = dirname(__DIR__) . '/logs';
|
|
if (!is_dir($logDir)) {
|
|
mkdir($logDir, 0755, true);
|
|
}
|
|
|
|
self::$logFile = $logDir . '/crm_extensions.log';
|
|
self::$initialized = true;
|
|
}
|
|
|
|
public static function debug($message, $context = []) {
|
|
self::log(self::LEVEL_DEBUG, $message, $context);
|
|
}
|
|
|
|
public static function info($message, $context = []) {
|
|
self::log(self::LEVEL_INFO, $message, $context);
|
|
}
|
|
|
|
public static function warning($message, $context = []) {
|
|
self::log(self::LEVEL_WARNING, $message, $context);
|
|
}
|
|
|
|
public static function error($message, $context = []) {
|
|
self::log(self::LEVEL_ERROR, $message, $context);
|
|
}
|
|
|
|
private static function log($level, $message, $context = []) {
|
|
self::init();
|
|
|
|
if ($level < self::$logLevel) {
|
|
return;
|
|
}
|
|
|
|
$timestamp = date('Y-m-d H:i:s');
|
|
$levelStr = self::getLevelString($level);
|
|
|
|
$contextStr = '';
|
|
if (!empty($context)) {
|
|
$contextStr = ' | Context: ' . json_encode($context, JSON_UNESCAPED_UNICODE);
|
|
}
|
|
|
|
$logLine = "[{$timestamp}] {$levelStr}: {$message}{$contextStr}\n";
|
|
|
|
// Записываем в файл
|
|
@file_put_contents(self::$logFile, $logLine, FILE_APPEND | LOCK_EX);
|
|
|
|
// Также в системный лог если это ошибка
|
|
if ($level >= self::LEVEL_ERROR) {
|
|
error_log('[CRM_Extensions] ' . $message);
|
|
}
|
|
}
|
|
|
|
private static function parseLogLevel($levelStr) {
|
|
switch (strtoupper($levelStr)) {
|
|
case 'DEBUG': return self::LEVEL_DEBUG;
|
|
case 'INFO': return self::LEVEL_INFO;
|
|
case 'WARNING': return self::LEVEL_WARNING;
|
|
case 'ERROR': return self::LEVEL_ERROR;
|
|
default: return self::LEVEL_INFO;
|
|
}
|
|
}
|
|
|
|
private static function getLevelString($level) {
|
|
switch ($level) {
|
|
case self::LEVEL_DEBUG: return 'DEBUG';
|
|
case self::LEVEL_INFO: return 'INFO';
|
|
case self::LEVEL_WARNING: return 'WARNING';
|
|
case self::LEVEL_ERROR: return 'ERROR';
|
|
default: return 'UNKNOWN';
|
|
}
|
|
}
|
|
}
|
|
} // Закрываем if (!class_exists('CRM_Logger'))
|