Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 11, 2013 09:26:29

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Можно ли разделить сообщения логера(модуль logging)?

Есть функция logic(ip), которая выполняет некоторую работу и ведет лог путем

 logging.debug('Настройка %s' %ip)
и т.п.

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



Офлайн

#2 Сен. 11, 2013 10:58:12

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Можно ли разделить сообщения логера(модуль logging)?

Можно создавать свои логгеры и каждому присваивать свой набор хэндлеров, например:

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 это позволяет настроить более сложную фильтрацию, чем доступная из коробки (по именам разделённым точкой)

Отредактировано lorien (Сен. 11, 2013 11:00:01)

Офлайн

#3 Сен. 12, 2013 07:38:46

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Можно ли разделить сообщения логера(модуль logging)?

lorien
Можно создавать свои логгеры и каждому присваивать свой набор хэндлеров, например:

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

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

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

Если бы я вызывал функцию последовательно, я бы просто менял хендлеры к логгеру каждый раз перед новым вызовом функции, указывая разные файлы. А как поступить с логированием при параллельных вызовах функции - вот это, собственно, и есть мой вопрос.



Отредактировано plusplus (Сен. 12, 2013 07:39:30)

Офлайн

#4 Сен. 12, 2013 08:17:54

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Можно ли разделить сообщения логера(модуль logging)?

Я подумал, вы можете простой свой Handler набросать, который будет анализировать текст сообщения и записывать в нужный файл.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version