2016-07-26 2 views
-1

私は常に更新され、継続的に行を処理するログファイルを聴きようとしています。 事は、私は複数のファイルを聞くことです。ログはjbossインスタンスで区切られており、データベースにそれらを挿入するためにはすべて一緒に作業する必要があります。複数のファイルをリアルタイムで読み込む?

質問5419888からファイルを連続して読み込む方法の良い例がありますが、このコードは1つのファイルのみを時間で読み込みます。私はそれらをすべて読むために次のコードを試しましたが、ファイルの配列内で最初に見つかったファイルだけを聴いています。

これを使用して、同時にすべてのファイルを処理する方法を教えてください。

import time 
from glob import glob 

def follow(thefile): 
    thefile.seek(0,2) 
    while True: 
     line = thefile.readline() 
     if not line: 
      time.sleep(0.1) 
      continue 
     yield line 



if __name__ == '__main__': 
    for log in glob("/logs/xxx/production/jboss/yyy*/xxx-production-zzzz*/xxx-production-zzzz*-xxx-Metrics.log"): 
     logfile = open(log, "r") 
     loglines = follow(logfile) 

     for line in loglines: 
      print line, 
+0

http://stackoverflow.com/documentation/python/544/multithreading#t=201607261842139282503 –

+0

おそらくあなたが望むのは、各ファイルのスレッドを作成し、定義したfollow()関数をターゲット関数として設定することです。 – theVoid

+0

@Rawing私はこれを自分の状況に適用しようとしましたが、それをとてもうまく理解できませんでした。しかし、ありがとう。 – davis

答えて

2

あなたは、次のコードを使用して同時に各ファイルの行を印刷することができます。

lock = threading.Lock() 

def printFile(logfile): 
    loglines = follow(logfile) 
    for line in loglines: 
     #only one thread at a time can print to the user 
     lock.acquire() 
     print line 
     lock.release() 



if __name__ == '__main__': 
    for log in glob("/logs/xxx/production/jboss/yyy*/xxx-production-zzzz*/xxx-production-zzzz*-xxx-Metrics.log"): 
     logfile = open(log, "r") 
     t = threading.Thread(target = printFile,args = (logfile,)) 
     t.start() 
+0

これは私のために非常にうまくいった。ありがとう! – davis

+0

@davis私はあなたを助けることができてうれしいです。 – theVoid

関連する問題