feat: implement legacy shop management system and add task documentation files
CI Check / lint-and-check (push) Failing after 9s

This commit is contained in:
Dmitry Belan
2026-07-18 12:25:32 +03:00
parent 7e8afd2a7e
commit ee235ece10
14 changed files with 953 additions and 1 deletions
+42
View File
@@ -0,0 +1,42 @@
### Задача 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. Проверьте, что сообщения появились и в файле, и в консоли