Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
develop:pyton:logger [2022/12/03 10:06] admin |
develop:pyton:logger [2023/02/01 09:50] (текущий) admin |
||
---|---|---|---|
Строка 4: | Строка 4: | ||
===== Общее ===== | ===== Общее ===== | ||
[[https:// | [[https:// | ||
+ | |||
+ | < | ||
+ | < | ||
{{: | {{: | ||
Строка 9: | Строка 12: | ||
{{: | {{: | ||
+ | </ | ||
Строка 17: | Строка 21: | ||
Классы логгера наследуются, | Классы логгера наследуются, | ||
+ | Собсна структура конфига ниже, перечисляются форматтеры, | ||
- | < | + | Конфиг можно хранить в отдельном файле, но тогда нет возможности использовать переменные, |
- | import logging.config | + | |
+ | Настройка целевого уровня задается и в loggers и в handlers, сначала фильтруется в первом, | ||
- | LOGGING_CONFIG = { | + | <code json> |
+ | { | ||
" | " | ||
" | " | ||
Строка 29: | Строка 36: | ||
" | " | ||
} | } | ||
- | |||
- | logging.config.dictConfig(LOGGING_CONFIG) | ||
</ | </ | ||
+ | |||
+ | Для использования JSON нужен модуль [[https:// | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Три типа логов: | ||
+ | * Общий | ||
+ | * Только ошибки | ||
+ | * Логирование спец событий, | ||
+ | |||
+ | |||
+ | Использование | ||
<code python> | <code python> | ||
+ | # | ||
+ | |||
+ | import loggers | ||
+ | |||
+ | logger = loggers.get_logger(' | ||
+ | usr_logger = loggers.get_logger(' | ||
+ | |||
+ | logger.info(" | ||
+ | logger.error(" | ||
+ | usr_logger.info(" | ||
</ | </ | ||
+ | Создание объекта логгера | ||
<code python> | <code python> | ||
+ | # | ||
+ | import os | ||
+ | import json | ||
+ | import logging | ||
+ | import logging.config | ||
+ | |||
+ | FOLDER_LOG = " | ||
+ | LOGGING_CONFIG_FILE = ' | ||
+ | |||
+ | |||
+ | def create_log_folder(folder=FOLDER_LOG): | ||
+ | if not os.path.exists(folder): | ||
+ | os.mkdir(folder) | ||
+ | |||
+ | |||
+ | def get_logger(name, | ||
+ | create_log_folder() | ||
+ | with open(LOGGING_CONFIG_FILE, | ||
+ | dict_config = json.load(f) | ||
+ | dict_config[" | ||
+ | logging.config.dictConfig(dict_config) | ||
+ | return logging.getLogger(name) | ||
</ | </ | ||
+ | |||
+ | |||
+ | Конфиг | ||
+ | <code xml> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
===== Примеры ===== | ===== Примеры ===== | ||
+ | < | ||
+ | < | ||
+ | <code python> | ||
+ | import logging | ||
+ | from datetime import datetime | ||
+ | |||
+ | start_date = datetime.strftime(datetime.now(), | ||
+ | log_path = f" | ||
+ | |||
+ | # | ||
+ | log = logging.getLogger() | ||
+ | log.setLevel(logging.INFO) | ||
+ | fh = logging.FileHandler(filename=log_path) | ||
+ | fh.setLevel(logging.INFO) | ||
+ | formatter = logging.Formatter(fmt=' | ||
+ | fh.setFormatter(formatter) | ||
+ | log.addHandler(fh) | ||
+ | |||
+ | log.info(" | ||
+ | </ | ||
+ | </ | ||
< | < | ||
< | < | ||
- | |||
<code python> | <code python> | ||
import logging | import logging |