logging — журналювання подій#

Цей модуль надає легковажну підмножину стандартного пакета Python logging, адаптовану для MicroPython. Він підтримує рівневе журналювання через ієрархічно названі об’єкти Logger, невеликий набір обробників (StreamHandler, FileHandler), форматування у стилі printf через Formatter, а також зручні функції на рівні модуля, еквівалентні тим, що діють на кореневому логері.

Модуль досить точно повторює знайомий API CPython, щоб прості програми, написані для стандартної бібліотеки, працювали без змін. Фільтри, блокування між процесами, формат конфігураційного файлу та більшість класів обробників не передбачені.

Константи рівнів#

logging.CRITICAL: int#

Числове значення 50. Використовується для невиправних помилок.

logging.ERROR: int#

Числове значення 40. Використовується для серйозних проблем.

logging.WARNING: int#

Числове значення 30. Рівень за замовчуванням для щойно налаштованого кореневого логера.

logging.INFO: int#

Числове значення 20. Використовується для підтверджувальних повідомлень.

logging.DEBUG: int#

Числове значення 10. Використовується для детального діагностичного виведення.

logging.NOTSET: int#

Числове значення 0. Вказує на логер без налаштованого рівня (ефективний рівень успадковується від кореневого логера або WARNING).

Функції#

logging.getLogger(name: str | None = None) Logger#

Повертає Logger, зареєстрований під іменем name, створюючи його при першому зверненні. Якщо name дорівнює None, повертається кореневий логер. Перший виклик із name="root" (або без вказання name) неявно викликає basicConfig для приєднання стандартного StreamHandler, що записує у sys.stderr.

logging.log(level: int, msg: str, *args) None#

Записує повідомлення на рівні level до кореневого логера. args інтерполюються у msg за допомогою форматування % у стилі printf; одиночний аргумент-словник використовується як відображення.

logging.debug(msg: str, *args) None#

Еквівалентно getLogger().debug(msg, *args).

logging.info(msg: str, *args) None#

Еквівалентно getLogger().info(msg, *args).

logging.warning(msg: str, *args) None#

Еквівалентно getLogger().warning(msg, *args).

logging.error(msg: str, *args) None#

Еквівалентно getLogger().error(msg, *args).

logging.critical(msg: str, *args) None#

Еквівалентно getLogger().critical(msg, *args).

logging.exception(msg: str, *args, exc_info: bool | BaseException = True) None#

Еквівалентно getLogger().exception(msg, *args, exc_info=exc_info). Записує повідомлення на рівні ERROR і додатково форматує трасування активного виключення, якщо exc_info є істинним. Якщо exc_info сам є екземпляром BaseException, використовується трасування цього виключення; інакше при можливості звертається до sys.exc_info().

logging.shutdown() None#

Закриває всі обробники, прикріплені до всіх відомих логерів, і забуває логери. Реєструється автоматично через sys.atexit, якщо цей хук доступний.

logging.addLevelName(level: int, name: str) None#

Пов’язує текстове name з числовим level, щоб Formatter міг відображати його через %(levelname)s.

logging.basicConfig(filename: str | None = None, filemode: str = 'a', format: str | None = None, datefmt: str | None = None, level: int = WARNING, stream=None, encoding: str = 'UTF-8', force: bool = False) None#

Налаштовує кореневий логер з одним обробником.

Якщо вказано filename, створюється FileHandler з заданими filemode та encoding; інакше використовується StreamHandler, що записує у stream (за замовчуванням sys.stderr).

format та datefmt передаються до нового Formatter.

level встановлює рівень як для обробника, так і для кореневого логера.

Якщо кореневий логер вже має обробники, ця функція не виконує жодних дій, якщо тільки force не дорівнює True — у цьому випадку існуючі обробники закриваються і замінюються.

Класи#

class logging.Logger(name: str, level: int = NOTSET)#

Іменований логер. Створюйте логери через getLogger, а не напряму, щоб getLogger міг повертати той самий екземпляр для одного й того самого імені.

name: str#

Ім’я логера у форматі з крапками.

level: int#

Налаштований числовий рівень. 0 (NOTSET) означає «успадкувати».

handlers: list#

Список екземплярів Handler, прикріплених до цього логера. Якщо він порожній, повідомлення передаються обробникам кореневого логера.

setLevel(level: int) None#

Встановлює порогове значення рівня логера.

isEnabledFor(level: int) bool#

Повертає True, якщо повідомлення рівня level буде оброблене цим логером.

getEffectiveLevel() int#

Повертає перше ненульове значення з: рівня цього логера, рівня кореневого логера або WARNING.

log(level: int, msg: str, *args) None#

Записує msg на рівні level. args інтерполюються у msg за допомогою оператора %; якщо перший позиційний аргумент є словником, він використовується як відображення.

debug(msg: str, *args) None#

Записує msg на рівні DEBUG.

info(msg: str, *args) None#

Записує msg на рівні INFO.

warning(msg: str, *args) None#

Записує msg на рівні WARNING.

error(msg: str, *args) None#

Записує msg на рівні ERROR.

critical(msg: str, *args) None#

Записує msg на рівні CRITICAL.

exception(msg: str, *args, exc_info: bool | BaseException = True) None#

Записує msg на рівні ERROR і, якщо exc_info є істинним, додає відформатоване трасування. Якщо exc_info є екземпляром BaseException, відображається трасування цього виключення; інакше активне виключення отримується через sys.exc_info().

addHandler(handler: Handler) None#

Прикріплює handler до цього логера.

hasHandlers() bool#

Повертає True, якщо до цього логера прикріплені обробники.

class logging.Handler(level: int = NOTSET)#

Базовий клас для всіх обробників. Підкласи реалізують emit().

level: int#

Пороговий рівень обробника.

formatter: 'Formatter | None'#

Активний Formatter або None.

setLevel(level: int) None#

Встановлює пороговий рівень обробника.

setFormatter(formatter: Formatter) None#

Прикріплює formatter до цього обробника.

format(record: LogRecord) str#

Відображає record за допомогою налаштованого форматера.

close() None#

Звільняє ресурси, що утримуються обробником. Викликається shutdown і FileHandler при закритті.

class logging.StreamHandler(stream=None)#

Обробник, що записує відформатовані записи з подальшим self.terminator ("\n" за замовчуванням) у stream. stream за замовчуванням дорівнює sys.stderr.

stream#

Цільовий потоковий об’єкт.

terminator: str#

Рядок, що додається після кожного відформатованого запису. За замовчуванням "\n".

emit(record: LogRecord) None#

Записує record у stream, якщо його рівень відповідає пороговому значенню обробника.

close() None#

Скидає буфер нижчележачого потоку, якщо він має метод flush.

class logging.FileHandler(filename: str, mode: str = 'a', encoding: str = 'UTF-8')#

Підклас StreamHandler, що відкриває filename із заданими mode та encoding і записує відформатовані записи до нього. Нижчележачий файл закривається при close().

class logging.Formatter(fmt: str | None = None, datefmt: str | None = None)#

Перетворює екземпляри LogRecord на рядки.

fmt — це шаблон у стилі printf. Підтримувані ключі: %(name)s, %(message)s, %(msecs)d, %(asctime)s і %(levelname)s. Якщо не вказано, за замовчуванням використовується "%(levelname)s:%(name)s:%(message)s".

datefmt — це шаблон time.strftime для відображення %(asctime)s. За замовчуванням "%Y-%m-%d %H:%M:%S".

usesTime() bool#

Повертає True, якщо шаблон форматування посилається на asctime.

formatTime(datefmt: str, record: LogRecord) str | None#

Форматує record.ct за допомогою time.strftime і datefmt. Повертає None на платформах, де time.strftime недоступний.

format(record: LogRecord) str#

Відображає record. Якщо шаблон використовує asctime, спочатку викликається formatTime() для заповнення record.asctime.

class logging.LogRecord#

Контейнер для даних, що передаються від Logger до його обробників. Екземпляри заповнюються через set(); реалізації логера повторно використовують один запис на логер для зменшення кількості виділень пам’яті.

name: str#

Ім’я логера-джерела.

levelno: int#

Числовий рівень цього запису.

levelname: str#

Текстова назва рівня.

message: str#

Повністю відформатоване повідомлення журналу.

ct: float#

Час створення, що повертається time.time().

msecs: int#

Компонент мілісекунд атрибута ct.

asctime: str | None#

Людиночитаний часовий штамп; заповнюється ліниво за допомогою Formatter.

set(name: str, level: int, message: str) None#

Ініціалізує запис із заданими значеннями та фіксує поточний час.