Вопрос по python – Ведение журнала с использованием многопроцессорной обработки

2

У меня есть следующееlogger класс (как logger.py):

import logging, logging.handlers
import config

log = logging.getLogger('myLog')

def start():
    "Function sets up the logging environment."
    log.setLevel(logging.DEBUG)
    formatter = logging.Formatter(fmt='%(asctime)s [%(levelname)s] %(message)s', datefmt='%d-%m-%y %H:%M:%S')

    if config.logfile_enable:
        filehandler = logging.handlers.RotatingFileHandler(config.logfile_name, maxBytes=config.logfile_maxsize,backupCount=config.logfile_backupCount)
        filehandler.setLevel(logging.DEBUG)
        filehandler.setFormatter(formatter)
        log.addHandler(filehandler)

    console = logging.StreamHandler()
    console.setLevel(logging.DEBUG)
    console.setFormatter(logging.Formatter('[%(levelname)s] %(message)s')) # nicer format for console
    log.addHandler(console)

    # Levels are: debug, info, warning, error, critical.
    log.debug("Started logging to %s [maxBytes: %d, backupCount: %d]" % (config.logfile_name, config.logfile_maxsize, config.logfile_backupCount))

def stop():
    "Function closes and cleans up the logging environment."
    logging.shutdown()

Для входа я запускаюlogger.start() один раз, а затем импортироватьfrom logger import log в любом файле проекта. Тогда я просто используюlog.debug() а такжеlog.error() при необходимости. Он отлично работает в любом месте сценария (разные классы, функции и файлы), но он не будет работать на разных процессах, запускаемых через класс многопроцессорности.

Я получаю следующую ошибку:No handlers could be found for logger "myLog".

Что я могу сделать?

Ну, я не инициализировал его снова во втором процессе. Имеет смысл, почему обработчики не могут быть найдены. Но я не могу использовать другой объект регистратора в одном и том же файле и ожидать, что оба объекта будут регистрироваться правильно. Или я не прав? iTayb
Где вы инициализируете «второе»? и выполняет ли второй процесс верхний фрагмент кода? DonCallisto
@Not_a_Golfer Спасибо. пожалуйста, отправьте это как ответ, таким образом я могу выбрать это. iTayb
может это актуально?docs.python.org/howto/… Not_a_Golfer

Ваш Ответ

1   ответ
9

logging to a single file from multiple processes is not supported, because there is no standard way to serialize access to a single file across multiple processes in Python.

Увидеть:http://docs.python.org/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes

Кстати, в этой ситуации я использую Scribe, который является агрегатором распределенных журналов, в который я вхожу через TCP. Это позволяет мне войти всеservers У меня на том же месте не только все процессы.

Смотрите этот проект:http://pypi.python.org/pypi/ScribeHandler

Похожие вопросы