Loger by Koenig

777
.
(\/)____o_O____(\/)
Выкладываю логер, пригодиться логировать телодвижения пользователей, как известно юзеры имеют ид в базе - который по сути уникальный
сам класс раз в сутки делает архив данных за сутки, данные на каждого пользователя содержатся в его текстовом файле, номер юзера == номер файла
класс
<?php

class loger {

private static $user;    
private static $dir;    
private static $logdir = 'logs';
private static $archdir = 'archive';

public function __construct($user) {
if (!is_dir(self::$logdir . DIRECTORY_SEPARATOR . date('Y-m-d'))) {
if (!mkdir(self::$logdir . DIRECTORY_SEPARATOR . date('Y-m-d'), 0777, true)) {
#throw new Exception('WTF, log dir not created');     
} 
}
if (!is_dir(self::$archdir)) {
if (!mkdir(self::$archdir, 0777, true)) {
#throw new Exception('WTF, archive dir not created');     
} 
}
self::$dir = self::$logdir . DIRECTORY_SEPARATOR . date('Y-m-d');
self::$user = $user;
}
    
public static function writelog($text) {
if (self::$dir === null) {
#throw new Exception('WTF, dir not initialiting');
} else {
$file = self::$dir . DIRECTORY_SEPARATOR . self::$user . '.txt';
file_put_contents($file, $text . PHP_EOL, FILE_APPEND | LOCK_EX); 
}
self::logrotate();     
}

public static function logrotate() {
$sda = array_diff(scandir(self::$logdir), array('.', '..'));
if (sizeof($sda)>0) {
foreach ($sda as $dir) {
if ($dir != date('Y-m-d')) {
$zip = new ZipArchive;
if ($zip->open(self::$archdir . DIRECTORY_SEPARATOR . $dir . '.zip', ZipArchive::CREATE) === TRUE) {
$zip->addEmptyDir($dir);
$sdf = array_diff(scandir(self::$logdir . DIRECTORY_SEPARATOR . $dir), array('.', '..'));     
foreach ($sdf as $file) {
$zip->addFile(self::$logdir . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . $file, $dir . DIRECTORY_SEPARATOR . $file);    
}
$zip->close();
} else {
#throw new Exception('WTF, archive not created'); 
}
if (is_file(self::$archdir . DIRECTORY_SEPARATOR . $dir . '.zip')) {
self::deldir(self::$logdir . DIRECTORY_SEPARATOR . $dir);    
}
}
}
}
}

public static function deldir($dir) {
$dirarr = array_diff(scandir($dir), array('.', '..'));
if (sizeof($dirarr)>0) {    
foreach ($dirarr as $file) { 
unlink($dir . DIRECTORY_SEPARATOR . $file);
}
}
rmdir($dir);
}

}

?>

нужен пхп > 5.3 с zip
пример
include('koelog.php');    
new loger($user_id);
loger::writelog('test1');
loger::writelog('test2');
loger::writelog('test3');
loger::writelog('test4');

где нужено записать лог, добавляем строку
loger::writelog($text_log);
ну класс сам кто как захочет, так и подключит
что инклюдом, что автолоадом
главное инициализировать объект с номером пользователя, например в ядре, где определяется $user_id
после добавить
new loger($user_id);
Прикрепленные файлы:
.
(\/)____o_O____(\/)
создается папка на текущийй день, в нее складываются файлы, как только день кончиться, создасться новая папка, прошлый день попадает в архив, и папка прошлого дня удаляется
.
Круто спасибо !
.
(\/)____o_O____(\/)
сама идея пошла от приложения для линуха logrotate у кого вдска, может сделать подобное настроить не сложно, техническое применение - есть много админ состава на большом ресурсе, все они нажимают админ кнопки, и чтоб небыло всякоразных недоразумений, старший всегда сможет посмотреть кто что нажимал, не всегда ведь товарищи на посту, по горящим следам например можно востановить удаленную тему форума из бэкапа за вчерашний день, и узнать виновника
.
(\/)____o_O____(\/)
или как вариант вместо юзерид указывать ип адрес, и смотреть активность, не обязательно это будет один человек и не обязательно один ник, мультиков ловить
.
Блиносвёрт ?
полезная вещь, правда я не люблю на хосте лазить, поэтому лог.файлы в админке вывожу себе.
.
(\/)____o_O____(\/)
Jane, так получается меньше занимает информация места на сервере, нагрузка тоже не велика, зависит от количества вызовов, можно почитать информацию за месяц или за пол года например, возможности применения огромны, зависят только от вашей фантазии , главное информативное наполнение текстового сообщения
.
Блиносвёрт ?
Koenig, да, нужная инфа, я была очень удивлена, когда знакомилась с джоном, что в нем нет ничего подобного
.
и походу не будет
.
Блиносвёрт ?
народ не комментирует, видно особо не врубились, что это... да и не кодер особо и не воспользуется, не тривиально это для тех, кто привык закинуть на хост и все заработало
Всего: 26