Эффективно читать большой, активный файл журнала Python - PullRequest
1 голос
/ 06 апреля 2011

Когда мой сценарий Python построчно записывает большое количество журналов в текстовый файл, используя встроенную библиотеку журналов Python, в моей программе на Windows, работающей на Delphi, я хочу эффективно читать все недавно добавлены логи (строки).

  1. Когда сценарии Python регистрируются к файлу, моя программа Windows будет сохранить файл readonly для доступа к файлу этот файл журнала;

  2. Я буду использовать Windows API, чтобы получить информируется, когда файл журнала изменено; Как только файл будет изменен, он будет читать вновь добавленные строки.

Я новичок в Python, вы видите какие-либо возможные проблемы с этим подходом? Блокирует ли Python logging lib весь журнал? Спасибо!

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Конечно, это зависит от используемого вами обработчика журналов, но, как вы можете видеть из исходного кода , logging.FileHandler в настоящее время не создает никаких блокировок файлов. По умолчанию он открывает файлы в режиме «a» (добавление), поэтому, пока ваши вызовы Windows могут с этим справиться, у вас все будет хорошо.

0 голосов
/ 07 апреля 2011

Как прокомментировал 100sәɹoɈ , стандартный регистратор FileHandler не блокирует файл, поэтому он должен работать. Однако, если по какой-то причине вы не можете заблокировать файл - тогда я бы рекомендовал, чтобы другое приложение периодически открывало файл, записывало позицию, в которой оно было прочитано, а затем возвращалось к этой точке позже. Я знаю, что программа Linux DenyHosts использует этот подход при работе с файлами журналов, которые она должна отслеживать в течение длительного периода времени. В этих ситуациях просто удерживать блокировку невозможно, так как каталоги могут перемещаться, файл поворачивается и т. Д. Хотя это усложняет ситуацию, вам нужно где-то хранить имя файла + положение чтения в постоянном состоянии.

...