Найти - Пользователи
Полная версия: Можно ли разделить сообщения логера(модуль logging)?
Начало » Python для экспертов » Можно ли разделить сообщения логера(модуль logging)?
1
plusplus
Есть функция logic(ip), которая выполняет некоторую работу и ведет лог путем
 logging.debug('Настройка %s' %ip)
и т.п.

Если я запущу эту функцию в несколько потоков, то все сообщения этого лога смешаются в одну кучу, а мне бы хотелось получать для каждого ip отдельно. Есть какая-нибудь возможность перехватывать не глобальный логгер, а обособленный логгер для каждой функции?
lorien
Можно создавать свои логгеры и каждому присваивать свой набор хэндлеров, например:
ip = '192.168.1.0'
logger = logging.getLogger('ip.%s' % ip)
logger.addHandler(logging.FileHandler('var/log/ip.%s.log' % ip))

all_ip_logger = logger.getLogger('ip')
all_ip_logger.addHandler(logging.FileHandler('var/log/allip.log'))

logger.debug('Foo')
# Foo попадёт в оба лога
logging.getLogger('ip.127.0.0.1').debug('Bar')
# Bar попадёт только в allip.log

Однако в вашем случае не совсем понятно, что вам нужно, если вы заранее не знаете какие будут ip-адреса, то проблематично такой подход применить.

Ещё вот что есть: http://docs.python.org/2/library/logging.html#filter-objects это позволяет настроить более сложную фильтрацию, чем доступная из коробки (по именам разделённым точкой)
plusplus
lorien
Можно создавать свои логгеры и каждому присваивать свой набор хэндлеров, например:

За объяснение работы с точками, спасибо, но создавать свои логгеры я не могу. Уже создан root-logger в функции logic, который я использую.

lorien
Однако в вашем случае не совсем понятно, что вам нужно, если вы заранее не знаете какие будут ip-адреса, то проблематично такой подход применить.

Ну вот запустить многопоточно функцию logic и для каждого ip-шника(для каждого вызова функции, если быть точнее) сохранить лог в отдельный файл.

Если бы я вызывал функцию последовательно, я бы просто менял хендлеры к логгеру каждый раз перед новым вызовом функции, указывая разные файлы. А как поступить с логированием при параллельных вызовах функции - вот это, собственно, и есть мой вопрос.
lorien
Я подумал, вы можете простой свой Handler набросать, который будет анализировать текст сообщения и записывать в нужный файл.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB