Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.15.63.145] |
|
Сообщ.
#1
,
|
|
|
Добрый день! Сразу прошу не кидаться помидорами- я стажер и только учусь, мне было дано задание
Написать класс для логирования сообщений. Указанные классы будут использоваться другими разработчиками в крупной высоконагруженной системе. Требования: - Возможность писать логи в stdout, mysql, файл по выбору. (Выбор осуществляется для всей системы логирования) - Предусмотреть настройки mysql, пути до файла логирования - Логи должны содержать: * Дату и время события (в формате YYYY-MM-DD HH:MM:SS) * Сообщение логирования (строка, массив, объект, исключение) Класс написан, очень прошу прислать ваши замечания, рекомендации и прочее-прочее-прочее <?php include ("db.php"); class Log_Printer { public static $path; protected $filename; protected $bdname; protected $tbname; protected $result; public function_construct($file_name = 'log.txt', $name_database = my_db, $name_table = my_tb) { $this->filename = $file_name; $this->bdname = $name_database; $this->tbname = $name_table; } public function get_message($var) { if ($var) { $date = '====== ' . date('Y-m-d H:i:s') . " =====\n"; $this->result = $var; if (is_array($var) || is_object($var)) { $this->result = print_r($var, 1); // ничего не //печатается на экран только перевод в строк } $this->result.= "\n"; return $this->result; } public function log_db($message) { if (!mysql_connect("$HOST", "$USER", "$PASS")) exit(mysql_error()); $r = mysql_query("CREATE DATABASE IF NOT EXISTS $this->bdname "); if (!$r) exit(mysql_error()); mysql_select_db($this->bdname); mysql_query('SET NAMES UTF8'); $res = mysql_query("CREATE TABLE IF NOT EXISTS $this->tbname (`id` INT(11)COLLATE utf8_general_ci NOT NULL AUTO_INCREMENT, `message` CHAR(200) COLLATE utf8_general_ci NOT NULL, PRIMARY KEY(`id`));"); $insert_res = "INSERT INTO $this-tbname (id,message) VALUES (0,$message);"; } public function log_stdout($message) { $fp = fopen("php://stdout", 'r+'); fputs($fp, $message); // Читаем то, что мы записали. rewind($fp); echo stream_get_contents($fp); } public function log_file($message) { $path = dirname($_SERVER['SCRIPT_FILENAME']) . $this->filename; file_put_contents($path, $message); } } |
Сообщ.
#2
,
|
|
|
Цитата besthelper @ Класс написан, очень прошу прислать ваши замечания, рекомендации и прочее-прочее-прочее Если кратко, то: 1) mysql_* функции устарели и вырезаны из языка 2) Для форматирования кода желательно использовать один из существующих стандартов написания (PSR, например) 3) Логика слишком сильно завязана на реализацию класса, т.е. ни БД, ни что-либо иное поменять физически невозможно, без влезания в исходный код Добавлено З.Ы. Рекомендую для начала попробовать найти готовые решения, например: https://github.com/symfony/MonologBundle |
Сообщ.
#3
,
|
|
|
Премного благодарна за ссылку.
|
Сообщ.
#4
,
|
|
|
Хотя это штука наверно слишком громоздкая...
Добавлено В любом случае тут можно найти любой пакет для любых нужд: https://packagist.org/search/?q=log =) |
Сообщ.
#5
,
|
|
|
Цитата Serafim @ Ок, спасибо! |