ModuleLogger
Package | engine.modules |
---|---|
Inheritance | class ModuleLogger » Module » LsObject |
Since | 1.0 |
Source Code | /engine/modules/logger/Logger.class.php |
$this->Logger_Debug('Debug message');
Protected Properties
Property | Type | Description | Defined 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
Method | Description | Defined 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
Method | Description | Defined By |
---|---|---|
__clone() | Блокируем копирование/клонирование объекта | Module |
log() | Записывает лог | ModuleLogger |
parserTrace() | Выполняет форматирование трассировки | ModuleLogger |
rotate() | Производит ротацию логов | ModuleLogger |
rotateRename() | Переименовывает все файлы логов согласно их последовательности | ModuleLogger |
write() | Производит сохранение в файл | ModuleLogger |
Property Details
Использовать автоматическую ротация логов
Использовать или нет трассировку
Случайное число
Максимальный размер файла при ротации логов в байтах
Уровни логгирования
Имя файла куда писать лог
Путь до каталога с логами
Текущий уровень логирования
Method Details
public void Debug(string $msg)
| ||
$msg | string | Сообщение для записи в лог |
public function Debug($msg) {
$this->log($msg,'DEBUG');
}
Запись в лог с уровнем логирования 'DEBUG'
public void Error(string $msg)
| ||
$msg | string | Сообщение для записи в лог |
public function Error($msg) {
$this->log($msg,'ERROR');
}
Запись в лог с уровнем логирования 'ERROR'
public string GetFileName()
| ||
{return} | string |
public function GetFileName(){
return $this->sFileName;
}
Получает имя файла лога
public bool GetUseRotate()
| ||
{return} | bool |
public function GetUseRotate() {
return $this->bUseRotate;
}
Использует ротацию логов или нет
public bool GetUseTrace()
| ||
{return} | bool |
public function GetUseTrace() {
return $this->bUseTrace;
}
Использует трассировку или нет
public int GetWriteLevel()
| ||
{return} | int |
public function GetWriteLevel() {
return $this->writeLevel;
}
Возвращает текущий уровень лога
public void Init()
|
public function Init() {
$this->sPathLogs=Config::Get('path.root.server').'/logs/';
$this->SetFileName(Config::Get('sys.logs.file'));
$this->iRandom=rand(1000,9999);
}
Инициализация, устанавливает имя файла лога
public void Notice(string $msg)
| ||
$msg | string | Сообщение для записи в лог |
public function Notice($msg) {
$this->log($msg,'NOTICE');
}
Запись в лог с уровнем логирования 'NOTICE'
public void SetFileName(string $sFile)
| ||
$sFile | string |
public function SetFileName($sFile){
$this->sFileName=$sFile;
}
Устанавливает имя файла лога
public void SetUseRotate(bool $bool)
| ||
$bool | bool |
public function SetUseRotate($bool) {
$this->bUseRotate=(bool)$bool;
}
Использовать ротацию логов или нет
public void SetUseTrace(bool $bool)
| ||
$bool | bool | Использовать или нет троссировку в логах |
public function SetUseTrace($bool) {
$this->bUseTrace=(bool)$bool;
}
Использовать трассировку или нет
public bool SetWriteLevel(int, $level)
| ||
$level | int, | string('DEBUG','NOTICE','ERROR') $level Уровень логирования |
{return} | bool |
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;
}
Уставливает текущий уровень лога, тот уровень при котором будет производиться запись в файл лога
protected void log(string $msg, string $sLevel)
| ||
$msg | string | Сообщение для записи в лог |
$sLevel | string | Уровень логирования |
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);
}
}
Записывает лог
protected string parserTrace(array $aTrace)
| ||
$aTrace | array | |
{return} | string |
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;
}
Выполняет форматирование трассировки
protected void rotate()
|
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++;
}
}
}
Производит ротацию логов
protected void rotateRename(int $numberLast)
| ||
$numberLast | int |
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]);
}
Переименовывает все файлы логов согласно их последовательности
protected bool write(string $msg)
| ||
$msg | string | Сообщение |
{return} | bool |
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;
}
Производит сохранение в файл