LINUX.ORG.RU

Научите писать ошибки python скрипта в лог

 


1

2

Прочитал несколько статей и везде пишуть про try/execept.

Самое красивое решение из найденных:

import logging 
def foo():
    try:
        some_code()
    except:
        logging.exception('')


 Нашел тут - http://stackoverflow.com/questions/4508849/how-to-log-python-exception

Может есть решение проще? Как записать в лог ошибку в рандомном месте?
★★★

Как записать в лог ошибку в рандомном месте?

Ну и вставляй в рандомном месте logging.exception(")

alozovskoy ★★★★★
()
Ответ на: комментарий от liathit

Спасибо. Похоже, то что нужно.

GoNaX ★★★
() автор топика
Ответ на: комментарий от alozovskoy

Скрипт берёт информацию со сторонних веб серверов, они раз в неделю(или реже) отдають какой-то мусор. У меня нет времени его тестировать и ловить «рандомные места». Хочу отдать заказчику и что бы в лог писалось, что это косяк не мой, а сервера.

GoNaX ★★★
() автор топика
Ответ на: комментарий от liathit

Ещё раз спасибо, что подсказал куда копать. В итоге захотел, что бы ошибка была и в логе скрипта и в консоли(или в логе крона). Получилось как-то так:

import logging
import sys
 
class StreamToLogger(object):
    """
    Fake file-like stream object that redirects writes to a logger instance.
    """
    def __init__(self, logger, log_level=logging.INFO):
        self.logger = logger
        self.log_level = log_level
        self.linebuf = ''

    def write(self, buf):
        for line in buf.rstrip().splitlines():
            self.logger.log(self.log_level, line.rstrip())
 
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s:%(levelname)-8s:%(name)s:%(message)s',
    filename="out.log",
    filemode='a'
)
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(asctime)s:%(levelname)-8s:%(name)s:%(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
 
stderr_logger = logging.getLogger('STDERR')
sl = StreamToLogger(stderr_logger, logging.ERROR)
sys.stderr = sl

kdcnaksjdn
GoNaX ★★★
() автор топика
Ответ на: комментарий от GoNaX

Ещё раз спасибо, что подсказал куда копать.

Не за что, рад за вас что разобрались.

liathit ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.