2014-12-10 3 views
0

Я знаю, что библиотека Python logging позволяет выполнять «круговое» ведение журнала по нескольким файлам журнала. То, что я пытаюсь сделать, это просто один файл, foo.log, который всегда < = B байт в размере; если следующий append собирается переложить его на B, то вещи удаляются сверху. Я был бы так же счастлив указать max в терминах событий.Python Logging - Circular Log (последние n записей)

Так что, если бы это было схема ротации файлов, а также пункт # 4 превышена B, вы должны:

foo.log.1 foo.log.2 
--------- --------- 
African  Swallow 
or 
European 

Я хотел бы просто ветер с:

foo.log 
------- 
or 
European 
Swallow 

EDIT: основываясь на комментариях ниже, люди на законных основаниях отметили, что это менее оптимальный формат. Мотивация исходит от отладки. У меня есть сценарии, использующие psycopg2 для выполнения запросов на удаленном сервере, который застрял в 2002 году, грубо говоря, без подключения к Интернету. После того, как он зарегистрирует все, что он отправляет в db, а затем проверяет, что журнал является самым быстрым способом увидеть, где что-то пошло не так, и я должен указать кому-то другому, чтобы сделать это. Я не хочу вводить усложнение, чтобы выяснить, какие это текущий файл журнала. Текущее решение - это просто написать журнал и удалить его, если он станет слишком большим.

+0

Это * очень неэффективный формат журнала *, потому что, как только вы нажмете ограничение на байты, он требует переписывания * всего журнала * при каждом добавлении новой строки. Нет простого способа удалить строки сверху, когда строки журнала имеют переменную длину. –

+0

Таким образом, нет существующего модуля или кода, который позволяет это сделать; вы в конечном итоге переписываете свой файл журнала каждый раз, когда хотите что-либо добавить. Вы можете написать собственный обработчик журнала, но производительность будет такой мрачной, что это просто не стоит. –

ответ

0

Как отмечает Мартидж, этот тип журнала был бы сложным для управления и, возможно, неэффективным (хотя это может или не относится к вам).

Простым способом решения какой-либо части неэффективности является использование фиксированных длин записей. То есть сделайте каждую запись в журнале той же (максимальной) длиной.

Другой способ - сделать ваш журнал основанным на базе базы данных и просто сделать запись (переменную или нет) для каждой записи в журнале. Пусть менеджер db обрабатывает настройки. Существуют простые (основанные на ОЗУ) базы данных для реальных, основанных на дисках, все из которых вы можете получить с помощью Python.

Еще одно решение, если вы довольны журналом на основе памяти, - это просмотр файлов FIFO.

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