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. Кто-нибудь знает, как я могу отключить это?