Есть ли в Python стандартный файл журнала ошибок и функция error_log, такая как PHP?

Пытаясь как разработчик конвертировать из php в python. В настоящее время выполняется попытка отладки сценария Python, выполнение которого занимает около 45 минут. Еще не умер, когда бежал из командной строки. Умирает примерно половину времени при беге от хрон.

С помощью php я мог просто вернуться в окно, в котором он работал, проверить файл журнала на время его запуска и найти / исправить ошибки, если скрипт был запущен. Есть ли в Python нечто подобное?

1

Решение

питон Можно печатать журналы в файле, но это не то поведение, которое вы получаете из коробки. По умолчанию он печатает журналы с уровнем журнала, равным или превышающим WARNING на stderr:

import logging

logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')

Вот что происходит, когда вы запускаете этот скрипт:

$ python log.py
WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical

$ python log.py 2>/dev/null   # does not print anything

$

Поэтому, если вы перенаправили stderr в файл в вашем задании cron, вы должны как минимум увидеть предупреждения и ошибки в этом файле. Если вы хотите легко войти непосредственно в файл, вы можете использовать logging.basicConfig:

import logging

# print log in example.log instead of the console, and set the log level to DEBUG (by default, it is set to WARNING)
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)

logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')

Теперь, если вы запустите его, у вас больше не будет ввода в консоли, но все должно быть в example.log:

$ python log.py

$ cat example.log
DEBUG:root:debug
INFO:root:info
WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical

Вы найдете гораздо больше деталей и параметров конфигурации в вход на страницу HOWTO

1

Другие решения

Я считаю, что вы просите о двух разных вещах. PHP обычно работает как приложение на стороне сервера, поэтому имеет специальные конструкции для регистрации ошибок. Python может работать с любым типом приложений и запускать несколько экземпляров одновременно, поэтому то, что вы спрашиваете, не имеет смысла в этом контексте. Тем не менее, вы все еще можете выполнить то, что вы хотите.

Хотя вы можете направить вывод в stderr непосредственно из задания cron «> /path/to/log.txt», для более детальной информации используйте pythons протоколирование Библиотекарь — часть стандартной библиотеки. Лично я предпочитаю pygogo — это обеспечивает хорошую обертку вокруг библиотеки регистрации.

Так…

  1. Добавьте некоторые записи в ваш Python с помощью стандартной библиотеки или Pygogo
  2. Передайте выходные данные из вашего задания cron в файл журнала, используя «>» или «tee».
  3. Следите за своими журналами в режиме реального времени, используя «tail -f /path/to/my/log.txt»

Я делаю это регулярно, работает как шарм.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector