Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 1
1

Класс для логирования в БД ФАЙЛ и stdout

13.03.2015, 11:57. Показов 3148. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Сразу прошу не кидаться помидорами- я стажер и только учусь, мне было дано задание

Написать класс для логирования сообщений.
Указанные классы будут использоваться другими разработчиками в крупной высоконагруженной системе.


Требования:
- Возможность писать логи в stdout, mysql, файл по выбору. (Выбор осуществляется для всей системы логирования)
- Предусмотреть настройки mysql, пути до файла логирования
- Логи должны содержать:
* Дату и время события (в формате YYYY-MM-DD HH:MM:SS)
* Сообщение логирования (строка, массив, объект, исключение)

Класс написан, очень прошу прислать ваши замечания, рекомендации и прочее-прочее-прочее
PHP
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
http: //web-developments.ru/web-programmirovanie/logirovanie-v-php-error_log
    http: //easy-code.ru/lesson/logger-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);
                    }
                }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2015, 11:57
Ответы с готовыми решениями:

BAT-файл для пинга и логирования
Подскажите пожалуйста, в ступоре от незнания. Нужно брать из текстового файла IP адрес, проверять...

Класс логирования
Добрый день. Не судите строго С# изучаю всего 2 недели. Решил написать (в учебных целях) систему...

Stdout записать в буфер и затем в stdout
Привет, подскажите начинающему как записать страницу загруженную с помощью curl в буфер а затем...

Функция логирования в txt файл
#include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; char sContent; char sFileLog =...

3
Заблокирован
18.03.2015, 19:34 2
Цитата Сообщение от besthelper Посмотреть сообщение
ваши замечания, рекомендации
прекратить заниматься некрофилией(mysql_*)...function_construct... ну банальность скажу:почему мануаль не прочитать. Вы последний раз на сайт php лет 20 назад заходили? А там уже последние лет 10 все на русском..
Цитата Сообщение от besthelper Посмотреть сообщение
dirname($_SERVER['SCRIPT_FILENAME'])
тоже забавно, чем __DIR__ не подходит? А я понял, вы - МОНТЕ-КРИСТО.. Пора приобщаться к современной жизни..
0
1 / 1 / 1
Регистрация: 28.07.2016
Сообщений: 9
28.07.2016, 23:02 3
как вам мой вариант?
PHP
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
40
41
42
43
<?php
abstract class Logger{
    protected $massege;
    protected $log_time;
    protected $host = 'localhost';
    protected $user = 'root';
    protected $password = '123';
    protected $db = 'test';
    public function get_date($error){
        @$this->log_time = date("[Y-m-d H:i:s]").serialize($error);
    }
    public function write_log_in_file(){
    }
}
class FileLogger extends Logger{
    private $way = 'log.txt';
    public function write_log_in_file(){
        return file_put_contents($this->way, $this->log_time . "\n", FILE_APPEND);
    }
}
class DBLogger extends Logger{
    public function __construct($host = 'localhost', $user = 'root',$password = '123',$db = 'test'){
        $this->host = $host;
        $this->user = $user;
        $this->password = $password;
        $this->db = $db;
    }
    public function write_log_in_file(){
        $connect = mysqli_connect($this->host,$this->user,$this->password,$this->db);
        if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
        }
        $sql = mysqli_query($connect, "INSERT INTO Logg (massege) VALUES('error')");
        mysqli_close($connect);
    }
}
$Log = new FileLogger('/log.txt');
$Log->get_date('Error');
$Log->write_log_in_file();
$mysqliLog = new DBLogger();
$mysqliLog->write_log_in_file();
?>
0
146 / 105 / 44
Регистрация: 30.04.2016
Сообщений: 550
29.07.2016, 08:15 4
write_log_in_file этот метод пишет только ERROR в БД.

вы в методе write_log_in_file каждый раз делаете подключение к бд. В вашей системе нет общего подключения к БД? Ошибка проектирования системы.

Этот класс может использоваться во мноих местах разработчиками. Им придется каждый раз его инициализировать или хватит отдого раза, потом он будет в контейнере? Если каждый раз, я бы сделал поля статическими.

Для такого простого действия вы применили наследование. Хм, зачем? Если в родительском классе нет ничего и в нем напутаны настройки файла и базы данных, что должно быть в дочерних классах.

Форматирование кода ужасное, к сожалению.

Как я вижу для себя идеальный логгер? Да вот так:
PHP
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
$log->stdout('Пишем в консоль');
$log->db('Пишем в базу данных');
$log->file('Пишем в файл');
 
// а еще лучше сделать вот так:
interface ILogger 
{
       public function add($text);
}
 
class DbLogger implements ILogger 
{
       private $_connection;
 
       public function (Connection $connection)
       {
             $this->_connection = $connection;
       }
       
       public function add($tet)
       {
          // вставка в бд
       }
}
 
// и далее по аналогии, но все классы должны реализовывать интерфейс ILogger
0
29.07.2016, 08:15
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2016, 08:15
Помогаю со студенческими работами здесь

Перенаправление stdout в другой bat-файл
Есть некая циклическая программа, запущенная из cmd. Она иногда выводит результат и продолжает...

Скрипт для логирования
Всем привет кто зашел) я только к вам подключился) и есть у меня вопрос очень важный сделал скрипт...

Компонента для логирования программы...
И снова привет всем человекам любящим программирование!!!!!!!!!!!!! Такой вопрос: Есть ли для...

Посоветуйте решение для логирования
привет посоветуйте решение для логирования задача - собирать отладочную информацию и стадии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru