2015-07-06 3 views
1

Я пишу фреймворк в python для реализации некоторых серверов. Они работают непрерывно, ждут заданий, и когда один или несколько обнаружены, они могут либо обработать его, запустить один или несколько потоков для его обработки, либо запустить подпроцесс для его обработки. Когда он ищет журнал заданий, данные должны входить в один файл, который будет вращаться ежедневно. Данные журнала для каждого задания войдут в отдельный файл журнала заданий с именем, основанным на идентификаторе задания.можно удалить детей из регистраторов python?

Это первый раз, когда я действительно пытался использовать протоколы python. Каков «правильный» способ сделать это? Одна мысль заключалась бы в том, чтобы добавить дочерний логгер для каждого задания, но, похоже, не существует способа удалить дочерние регистраторы (я думаю, что это не сложно сделать, удалив библиотечный код, но я предполагаю, что нет remove_child () по какой-либо причине).

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

ответ

1

Регистраторы относятся к областям в вашем приложении/местах вашего кода, поэтому на самом деле не имеет смысла добавлять и удалять регистраторы. Подход, который вы описали с обработчиками для каждого задания и фильтров, чтобы гарантировать, что сообщения будут регистрироваться только в одном файле, будет работать, и любой код, который вы вызывали в сторонних библиотеках, также будет иметь свои сообщения, направленные в нужное место. Хотя это не совсем тот же случай, я описал, как это будет работать для другого многопоточного сценария - веб-приложений - в this post.

Смежные вопросы