0

ログをテキストファイルに出力するレガシーのCプログラムがあり、このプログラムはログを毎日ローテーションすることができます。

例えば

app.log
app.log.2012-10-24
app.log.2012-10-23
..

ここで、ログを追跡してDBに挿入するPythonデーモンを作成したいと思います。私の質問です。

  1. Pythonでファイルをテール化するための推奨されるアプローチは何ですか?TwistedまたはPyinotify
  2. デーモンが停止し、ログテーリングを再開する必要がある場合の処理​​方法は?オフセットを別のファイルに保存する必要がありますか?

ありがとう。

4

1 に答える 1

2

同様の問題に遭遇しました。私のアプローチはこれです:

import io
import time

def checklog(fs,logfile):
    trytimes = 10
    line = ''
    while line == '':
        time.sleep(1)
        line = fs.readline().replace('\n','')
        trytimes = trytimes - 1
        while trytimes == 0 and line == '':
            try:
                fs = io.open(logfile,'rb')
                fs.seek(0,2)
                trytimes = 10
                break
            except:
                time.sleep(10)
    return line,fs


logfile="app.log"
fs = io.open(logfile,'rb')
fs.seek(0,2)# seek to tail of the logfile
while True:
    line = fs.readline().replace('\n','')
    while line == '':
        line,fs = checklog(fs,logfile)
        #do something for line;

お役に立てれば。

于 2012-10-31T02:34:26.977 に答える