- ログファイルは、いくつかの回以降の多くの行を有することができるとき、EOFの追い上げを処理する必要があります。
- コードハンドラを追加してファイルを再度開くことができます。たとえば、logrotate(RHELの場合)
- このログプロセッサに通知できない場合は、ファイルのiノードを確認できます。これは、あなたのログの回転がコピーでない場合に有効です&は切り詰めます。
このような場合は、必要な例外処理をすべて確認してください。これは、私の作業システムの部分的なコピーです:
def iNodeOf(file):
if os.path.exists(file):
s = os.stat(file)
return s.st_ino
else:
return -1
while True:
iReload = False
fileInode = iNodeOf(conf.LOGFILE)
f = open(conf.LOGFILE, 'r')
countDown = 15
while (not iReload) and (countDown > 0):
# seek to current position again
f.seek(0,1)
while countDown > 0:
filePos = f.tell()
line = f.readline()
if line:
process(line)
countDown = 15
else:
countDown -= 1
time.sleep(1)
newInode = iNodeOf(conf.LOGFILE)
if (fileInode == newInode):
# file not changed, sleep, seek from BOF, and try again
time.sleep(5)
f.seek(filePos,0)
countDown = 15
else:
# file changed
f.close()
iReload = True
あなたは*新しいのaccess.logの解析を行いません*パイソンパーサーによって意味は何?何かエラーが出ますか? – Kasramvd
ログを回転させたかどうかを示すフラグを使用しますか? – BlackMamba
@ Kasramvd、いいえ、プロセスは責任を負いません。エラーはありません。 –