-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLogger2.php
More file actions
39 lines (34 loc) · 2.13 KB
/
Copy pathLogger2.php
File metadata and controls
39 lines (34 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
date_default_timezone_set('UTC');
class FileLogger // Данный класс удобен для ведения журналов, добаляет имя записи и дату перед записью.
{
public static $loggers = []; // В этом массиве мы будем хранить все созданные объекты.
private $buffer = []; // Массив для накопления записей
private $name; // Имя записи
private $f; // Переменная файлового потока
private function __construct($name, $fname) // Конструктор делаем приватным, чтобы не было возможности плодить одинаковые объекты
{
$this->name = $name;
$this->f = fopen($fname, "a+"); // Создаём фаил, либо если он уже есть, то открываем его для дозаписи в конец.
}
public static function create($name, $fname) // Статический метод для создания объектов
{
if (isset(self::$loggers[$fname])) // если объект с таким именем файла уже существует, то используем его же.
{
return self::$loggers[$fname];
}else{
return self::$loggers[$fname] = new FileLogger($name, $fname); // если такого объекта нет, то создаём его, и записываем в массив.
}
}
public function log($str) // Метод принимает строку, вставляет перед ней дату и имя записи и записывает в буффер.
{
$prefix = "[".date("F j, Y, g:i a") . $this->name . "]";
$str = preg_replace("/^/m", $prefix, $str);
$this->buffer[] = $str . "\n";
}
public function __destruct() // При удалении объекта записываем данные из буффера в фаил и закрываем поток.
{
fputs($this->f, join("", $this->buffer));
fclose($this->f);
}
}