ipyparallel logging собирается в стандартный вывод

У меня проблема с параллельными движками, игнорирующими мои настройки ведения журнала при использовании средства запуска SLURM. В моем коде я использую следующее для настройки ведения журнала:

def setup_logger(logger_name, stdout = False, log_file = None, 
                 file_level=logging.DEBUG, buffer_ = True):

    l = logging.getLogger(logger_name)
    l.setLevel(logging.DEBUG)
    formatter = logging.Formatter('{levelname}:{message}', style='{')

    if log_file:

        fileHandler = logging.FileHandler(log_file, mode='w')
        fileHandler.setLevel(file_level)
        fileHandler.setFormatter(formatter)

        if buffer_:
            memoryHandler = logging.handlers.MemoryHandler(capacity = 1024*20, target = fileHandler)
            l.addHandler(memoryHandler)
        else:
            l.addHandler(fileHandler)

    if stdout:
        streamHandler = logging.StreamHandler()
        streamHandler.setLevel(stdout)
        streamHandler.setFormatter(formatter)
        l.addHandler(streamHandler)

Все, что работает, работает так, как я ожидаю, при локальном запуске (для большинства журналов я устанавливаю stdout = False, и все просто идет в файл). Однако, когда я запускаю кластер с ipyparallel, а затем использую тот же код, материал идет в файл, как и ожидалось, но дополнительно отправляется на стандартный вывод (который в конечном итоге направляется в файл с именем slurm-jobid.out в моем домашнем каталоге),

Я стараюсь убедиться, что setup_logger вызывается на движках, а не только локально. Это огромная проблема, потому что объем выходного сигнала, генерируемый ядрами, может сокрушить мой локальный диск, и я уверен, что отправка всего этого вывода по сети - огромный удар по производительности.

Может кто-нибудь объяснить, почему двигатели игнорируют stdout = False и как я могу это исправить?

РЕДАКТИРОВАТЬ: Я только что заметил, что журнал slurm-jobid.out отличается от других. Каждая запись включает в себя имя регистратора, т.е. DEBUG:logger_name:message Это говорит о том, что ipyparallel может объединять эти журналы для меня и имеет обработчик потока по умолчанию, отправляющий его в stdout. Кто-нибудь знает, как я могу отключить это?

0 ответов

Другие вопросы по тегам