Logging - бібліотека для зручного ведення логів у Python

У будь-якій розробці доводиться рано чи пізно вести логи, адже не віддаси замовнику програму де налагоджувальні повідомлення виводяться за допомогою print, та й надалі якщо у замовника щось піде не так то можна просто попросить показати лог і зрозуміти в чому проблема (у більшості випадків), так ось у пітоні є дуже потужна та зручна бібліотека і далі я спробую про неї розповісти. Для початку підключимо бібліотеку та спробуємо вивести на консоль повідомлення різного типу:

# Повідомлення налагоджувальне logging . debug (u 'This is a debug message') # Повідомлення інформаційне logging. info (u 'This is an info message') # Повідомлення попередження logging. warning (u 'This is a warning') # Повідомлення помилки logging. error (u 'This is an error message') # Повідомлення критичне logging. critical (u 'FATAL.')

При виведенні ми отримуємо:

WARNING:root:This is a warning ERROR:root:This is error message CRITICAL:root:FATAL .

Як ми бачимо то при виведенні ми отримуємо все крім повідомлень налагодження та інформаційних, для того щоб ми могли їх побачити потрібно в налаштування логера передати рівень помилок, що виводяться:

logging. basicConfig (level = logging. DEBUG)

Відразу хочу обмовитися, що параметри конфігурації повинні передаватися до першого виклику виведення помилки, ось код:

logging. basicConfig (level = logging. DEBUG)

# Повідомлення налагоджувальне logging . debug (u 'This is a debug message') # Повідомлення інформаційне logging. info (u 'This is an info message') # Повідомлення попередження logging. warning (u 'This is a warning') # Повідомлення помилки logging. error (u 'This is an error message') # Повідомлення критичне logging. critical (u' FATAL.')

Тепер після виведення ми отримаємо всі повідомлення:

DEBUG:root:This is debug message INFO:root:This is info message WARNING:root:This is warning ERROR:root:This is error message CRITICAL:root : FATAL.

Але все одно як мізерно виглядає висновок з нього мало чого зрозумієш, для це так само в конфізі логера можна задати формат повідомлення, що виводиться, подивитися всі атрибути можна (ось тут):

logging. basicConfig ( format = u '%(filename)s[LINE:%(lineno)d]# %(levelname)-8s [%(asctime)s] %(message)s' , level = logging . DEBUG )

тепер після виведення ми отримуємо такі повідомлення:

log.py [ LINE: 33 ] # DEBUG [2012-05-25 00:11:58,466] This is a debug message log.py [ LINE: 34 ] # INFO [2012-05-25 00:11: 58,466] Цей info message log.py [ LINE: 35 ] # WARNING [2012-05-25 00:11:58,466] Цей warning log.py [ LINE: 36 ] # ERROR [ 2012-05-25 00:11:58,467] Це не помилка повідомлення log.py [ LINE: 37 ] # CRITICAL [2012-05-25 00:11:58,467] FATAL.

Вже щось більше схоже на логи і видно ім'я файлу і рядок в якому викликано повідомлення, але виводити їх під час роботи добре коли йде розробка ну а при здачі проекту краще їх писати у файл, так давайте запишемо їх туди, для цього так само конфігурації передбачений параметр для того щоб вказати куди будемо писати лог: