43 lines
2.4 KiB
Markdown
43 lines
2.4 KiB
Markdown
### Задача 5. Система логирования (ООП, Наследование, Работа с файлами)
|
||
|
||
**Постановка**
|
||
|
||
* **Logger (базовый класс):** Умеет логировать сообщения.
|
||
* **FileLogger:** Наследник, который пишет в файл.
|
||
* **ConsoleLogger:** Наследник, который пишет в консоль.
|
||
* **MultiLogger:** Комбинированный логгер, который пишет везде.
|
||
|
||
**Задание**
|
||
|
||
**Класс `Logger`:**
|
||
|
||
1. Создайте класс `Logger`.
|
||
2. Метод `__init__(self, name)` — сохраняет имя логгера.
|
||
3. Метод `format_message(self, level, message)` — возвращает строку формата: `"[2026-07-18 10:30:45] [INFO] [LoggerName] Message"`. Используйте `datetime.now()`.
|
||
4. Метод `log(self, level, message)` — абстрактный метод, просто пишет `pass`. Переопределяется в наследниках.
|
||
|
||
**Класс `FileLogger(Logger)`:**
|
||
|
||
1. Создайте класс `FileLogger`, наследующий `Logger`.
|
||
2. В `__init__(self, name, filename)` вызовите `super().__init__(name)` и сохраните имя файла.
|
||
3. Переопределите `log(self, level, message)` — форматирует через `format_message` и записывает в файл (режим `'a'`, append).
|
||
|
||
**Класс `ConsoleLogger(Logger)`:**
|
||
|
||
1. Создайте класс `ConsoleLogger`, наследующий `Logger`.
|
||
2. Переопределите `log(self, level, message)` — форматирует и выводит в консоль через `print`.
|
||
|
||
**Класс `MultiLogger`:**
|
||
|
||
1. Создайте класс `MultiLogger`.
|
||
2. В `__init__(self, *loggers)` сохраните список логгеров.
|
||
3. Метод `log(self, level, message)` — вызывает `log` у каждого логгера.
|
||
|
||
**Тесты:**
|
||
|
||
1. Создайте `FileLogger("file_log", "app.log")`
|
||
2. Создайте `ConsoleLogger("console_log")`
|
||
3. Создайте `MultiLogger(file_logger, console_logger)`
|
||
4. Залогируйте несколько сообщений разных уровней: `"INFO"`, `"WARNING"`, `"ERROR"`
|
||
5. Проверьте, что сообщения появились и в файле, и в консоли
|