ModuleLogger

Package engine.modules
Inheritance class ModuleLogger » Module » LsObject
Since 1.0
Source Code /engine/modules/logger/Logger.class.php
Модуль логирования Имеет 3 уровня логирования: 'DEBUG','NOTICE','ERROR'
$this->Logger_Debug('Debug message');

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
bUseRotate bool Использовать автоматическую ротация логов ModuleLogger
bUseTrace bool Использовать или нет трассировку ModuleLogger
iRandom int Случайное число ModuleLogger
iSizeForRotate int Максимальный размер файла при ротации логов в байтах ModuleLogger
logLevel array Уровни логгирования ModuleLogger
oEngine Engine Объект ядра Module
sFileName string Имя файла куда писать лог ModuleLogger
sPathLogs string Путь до каталога с логами ModuleLogger
writeLevel int Текущий уровень логирования ModuleLogger

Public Methods

Hide inherited methods

MethodDescriptionDefined By
Debug() Запись в лог с уровнем логирования 'DEBUG' ModuleLogger
Error() Запись в лог с уровнем логирования 'ERROR' ModuleLogger
GetFileName() Получает имя файла лога ModuleLogger
GetUseRotate() Использует ротацию логов или нет ModuleLogger
GetUseTrace() Использует трассировку или нет ModuleLogger
GetWriteLevel() Возвращает текущий уровень лога ModuleLogger
Init() Инициализация, устанавливает имя файла лога ModuleLogger
Notice() Запись в лог с уровнем логирования 'NOTICE' ModuleLogger
SetFileName() Устанавливает имя файла лога ModuleLogger
SetInit() Помечает модуль как инициализированный Module
SetUseRotate() Использовать ротацию логов или нет ModuleLogger
SetUseTrace() Использовать трассировку или нет ModuleLogger
SetWriteLevel() Уставливает текущий уровень лога, тот уровень при котором будет производиться запись в файл лога ModuleLogger
Shutdown() Метод срабатывает при завершении работы ядра Module
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Module
__construct() При создании модуля передаем объект ядра Module
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
__clone() Блокируем копирование/клонирование объекта Module
log() Записывает лог ModuleLogger
parserTrace() Выполняет форматирование трассировки ModuleLogger
rotate() Производит ротацию логов ModuleLogger
rotateRename() Переименовывает все файлы логов согласно их последовательности ModuleLogger
write() Производит сохранение в файл ModuleLogger

Property Details

bUseRotate property
protected bool $bUseRotate;

Использовать автоматическую ротация логов

bUseTrace property
protected bool $bUseTrace;

Использовать или нет трассировку

iRandom property
protected int $iRandom;

Случайное число

iSizeForRotate property
protected int $iSizeForRotate;

Максимальный размер файла при ротации логов в байтах

logLevel property
protected array $logLevel;

Уровни логгирования

sFileName property
protected string $sFileName;

Имя файла куда писать лог

sPathLogs property
protected string $sPathLogs;

Путь до каталога с логами

writeLevel property
protected int $writeLevel;

Текущий уровень логирования

Method Details

Debug() method
public void Debug(string $msg)
$msg string Сообщение для записи в лог
Source Code: /engine/modules/logger/Logger.class.php#166 (show)
public function Debug($msg) {
    
$this->log($msg,'DEBUG');
}

Запись в лог с уровнем логирования 'DEBUG'

Error() method
public void Error(string $msg)
$msg string Сообщение для записи в лог
Source Code: /engine/modules/logger/Logger.class.php#174 (show)
public function Error($msg) {
    
$this->log($msg,'ERROR');
}

Запись в лог с уровнем логирования 'ERROR'

GetFileName() method
public string GetFileName()
{return} string
Source Code: /engine/modules/logger/Logger.class.php#158 (show)
public function GetFileName(){
    return 
$this->sFileName;
}

Получает имя файла лога

GetUseRotate() method
public bool GetUseRotate()
{return} bool
Source Code: /engine/modules/logger/Logger.class.php#142 (show)
public function GetUseRotate() {
    return 
$this->bUseRotate;
}

Использует ротацию логов или нет

GetUseTrace() method
public bool GetUseTrace()
{return} bool
Source Code: /engine/modules/logger/Logger.class.php#126 (show)
public function GetUseTrace() {
    return 
$this->bUseTrace;
}

Использует трассировку или нет

GetWriteLevel() method
public int GetWriteLevel()
{return} int
Source Code: /engine/modules/logger/Logger.class.php#110 (show)
public function GetWriteLevel() {
    return 
$this->writeLevel;
}

Возвращает текущий уровень лога

Init() method
public void Init()
Source Code: /engine/modules/logger/Logger.class.php#82 (show)
public function Init() {
    
$this->sPathLogs=Config::Get('path.root.server').'/logs/';
    
$this->SetFileName(Config::Get('sys.logs.file'));
    
$this->iRandom=rand(1000,9999);
}

Инициализация, устанавливает имя файла лога

Notice() method
public void Notice(string $msg)
$msg string Сообщение для записи в лог
Source Code: /engine/modules/logger/Logger.class.php#182 (show)
public function Notice($msg) {
    
$this->log($msg,'NOTICE');
}

Запись в лог с уровнем логирования 'NOTICE'

SetFileName() method
public void SetFileName(string $sFile)
$sFile string
Source Code: /engine/modules/logger/Logger.class.php#150 (show)
public function SetFileName($sFile){
    
$this->sFileName=$sFile;
}

Устанавливает имя файла лога

SetUseRotate() method
public void SetUseRotate(bool $bool)
$bool bool
Source Code: /engine/modules/logger/Logger.class.php#134 (show)
public function SetUseRotate($bool) {
    
$this->bUseRotate=(bool)$bool;
}

Использовать ротацию логов или нет

SetUseTrace() method
public void SetUseTrace(bool $bool)
$bool bool Использовать или нет троссировку в логах
Source Code: /engine/modules/logger/Logger.class.php#118 (show)
public function SetUseTrace($bool) {
    
$this->bUseTrace=(bool)$bool;
}

Использовать трассировку или нет

SetWriteLevel() method
public bool SetWriteLevel(int, $level)
$level int, string('DEBUG','NOTICE','ERROR') $level Уровень логирования
{return} bool
Source Code: /engine/modules/logger/Logger.class.php#93 (show)
public function SetWriteLevel($level) {
    if (
preg_match("/^\d$/",$level) and isset($this->logLevel[$level])) {
        
$this->writeLevel=$level;
        return 
true;
    }
    
$level=strtoupper($level);
    if (
$key=array_search($level,$this->logLevel)) {
        
$this->writeLevel=$key;
        return 
true;
    }
    return 
false;
}

Уставливает текущий уровень лога, тот уровень при котором будет производиться запись в файл лога

log() method
protected void log(string $msg, string $sLevel)
$msg string Сообщение для записи в лог
$sLevel string Уровень логирования
Source Code: /engine/modules/logger/Logger.class.php#191 (show)
protected function log($msg,$sLevel) {
    
/**
     * Если уровень записи в лог больше либо равен текущему уровню то пишем в лог
     */
    
if (($key=array_search(strtoupper($sLevel),$this->logLevel))!==false and $key>=$this->writeLevel) {
        
/**
         * Формируем текст лога
         */
        
$msgOut ='['.date("Y-m-d H:i:s").']';
        
$msgOut.='['.getmypid().']';
        
$msgOut.='['.$this->iRandom.']';
        
$msgOut.='['.$this->logLevel[$key].']';
        
$msgOut.='['.$msg.']';
        
/**
         * Если нужно то трассируем
         */
        
if ($this->getUseTrace()) {
            
$msgOut.='['.$this->parserTrace(debug_backtrace()).']';
        }
        
/**
         * Записываем
         */
        
$this->write($msgOut);
    }
}

Записывает лог

parserTrace() method
protected string parserTrace(array $aTrace)
$aTrace array
{return} string
Source Code: /engine/modules/logger/Logger.class.php#222 (show)
protected function parserTrace($aTrace) {
    
$msg='';
    for (
$i=count($aTrace)-1;$i>=0;$i--) {
        if (isset(
$aTrace[$i]['class'])) {
            
$funct=$aTrace[$i]['class'].$aTrace[$i]['type'].$aTrace[$i]['function'].'()';
        } else {
            
$funct=$aTrace[$i]['function'].'()';
        }
        
$msg.=$aTrace[$i]['file'].'(line:'.$aTrace[$i]['line'].'){'.$funct.'}';
        if (
$i!=0) {
            
$msg.=' => ';
        }
    }
    return 
$msg;
}

Выполняет форматирование трассировки

rotate() method
protected void rotate()
Source Code: /engine/modules/logger/Logger.class.php#277 (show)
protected function rotate() {
    
clearstatcache();
    
/**
     * Если размер файла лога привысил максимальный то сохраняем текущий файл в архивный, а текущий становится пустым
     */
    
if (filesize($this->sPathLogs.$this->sFileName)>=$this->iSizeForRotate) {
        
$pathinfo=pathinfo($this->sPathLogs.$this->getFileName());
        
$name=$pathinfo['basename'];
        
$aName=explode('.',$name);
        
$i=1;
        while (
1) {
            
$sNameNew=$aName[0].".$i.".$aName[1];
            
$sFullNameNew=$pathinfo['dirname'].'/'.$sNameNew;
            if (!
file_exists($sFullNameNew)) {
                
$this->rotateRename($i-1);
                break;
            }
            
$i++;
        }
    }
}

Производит ротацию логов

rotateRename() method
protected void rotateRename(int $numberLast)
$numberLast int
Source Code: /engine/modules/logger/Logger.class.php#303 (show)
protected function rotateRename($numberLast) {
    
$pathinfo=pathinfo($this->sPathLogs.$this->getFileName());
    
$aName=explode('.',$pathinfo['basename']);
    for (
$i=$numberLast;$i>0;$i--) {
        
$sFullNameCur=$pathinfo['dirname'].'/'.$aName[0].".$i.".$aName[1];
        
$sFullNameNew=$pathinfo['dirname'].'/'.$aName[0].'.'.($i+1).'.'.$aName[1];
        
rename($sFullNameCur,$sFullNameNew);
    }
    
rename($this->sPathLogs.$this->getFileName(),$pathinfo['dirname'].'/'.$aName[0].".1.".$aName[1]);
}

Переименовывает все файлы логов согласно их последовательности

write() method
protected bool write(string $msg)
$msg string Сообщение
{return} bool
Source Code: /engine/modules/logger/Logger.class.php#243 (show)
protected function write($msg) {
    
/**
     * Если имя файла не задано то ничего не делаем
     */
    
if (is_null($this->sFileName) or $this->sFileName=='') {
        
//throw new Exception("Empty file name for log!");
        
return false;
    }
    
/**
     * Если имя файла равно '-' то выводим сообщение лога на экран(браузер)
     */
    
if ($this->sFileName=='-') {
        echo(
$msg."<br>\n");
    } else {
        
/**
         * Запись в файл
         */
        
if ($fp=fopen($this->sPathLogs.$this->sFileName,"a")) {
            
fwrite($fp,$msg."\n");
            
fclose($fp);
            
/**
             * Если нужно то делаем ротацию
             */
            
if ($this->bUseRotate) {
                
$this->rotate();
            }
        }
    }
    return 
true;
}

Производит сохранение в файл