Найти - Пользователи
Полная версия: Чтение динамического лога
Начало » Python для новичков » Чтение динамического лога
1
ZlobnayaPechenka
Всем привет. Есть лог, который все время пишется, и при достижении определенного размера, начинает писаться заново (с нуля). Написала обработчик данного лога, который в динамике ищет фразы по шаблону и инсертит их. Проблема, как раз в моменте перезапуска лога. Подходящих решений не нашла, может кто сталкивался?

import os, time
import datetime
import re
import cx_Oracle
def tail(fileone):
    fileone.seek(0,2)
    while True:
        line = fileone.readline()
        if not line: 
            time.sleep(0.1)
            continue
        yield line
files = []
listing = []
con = cx_Oracle.connect('user/pass@127.0.0.1/mybase')
cur = con.cursor()
pat =  r'MASK'
 
fileone = open('C:/My.log')
logStr = tail(fileone)
for line in logStr:
    if 'mask1' in line:
        regular = re.search(pat, line)
        s = regular.group(2)
        example = [( s, datetime.datetime.now())]
        print example
        cur.executemany ("""
           insert into table(id, sys_creation_date)
           values (:1, :2)
           """, example)
        con.commit()
fileone.close()
cur.close()
con.close()
JOHN_16
Можете проверять текущую позицию “курсора” в файле с помощью метода tell(), в случае если файл перезаписывается сначала то поцизия будет меньше чем была ранее (в общем случае не 100% вариант конечно, но в данном случае так) и значит можно сместиться в начало файла seek(0) и продолжить выполнение цикла.
Все это в том случае если файл не был пересоздан т.е. не менялся файловый дескриптор, а перезаписывалось именно содержимое файла. В противном случае видимо надо переоткрывать файл.
Shaman
Надёжнее всего перехватывать события изменения в ФС.
Посмотрите на
https://pypi.python.org/pypi/infi.watchdog
https://github.com/shaurz/fsmonitor
и подобные.
doza_and
Вообще нормальный логгер обычно начинает новый файл, после записи N файлов начинает их писать с первого. или удаляет старые файлы. В этом случае слежка за позицией в файле не нужна. Правильное решение переконфигурировать логгер так чтобы он стал писать в более удобной для вас форме.
JOHN_16
doza_and
ну это же далеко не всегда возможно :-(. Поэтому слишком часто приходится задачи решать именно по факту.
doza_and
JOHN_16
ну это же далеко не всегда возможно
Согласен, жизнь далека от идеала…
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