Files

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'))