ログを読み、解析して最小の開始番号 (ヘッド) を取得し、それを出力する簡単なプログラムを作成しました。私は現在、そのプログラムを編集して、実際のログファイルを解析するために作成したクラスと組み合わせています。本質的に、以前のプログラムのログからの単純な数字に基づいてソートするのではなく、あるクラスから別のクラスへの解析された情報を参照する必要があります。これを行う最も便利な方法は何だろうと考えていました。私はPythonの初心者プログラマーで、クラスを明示的に参照できるかどうかわかりません。
ここにクラスがあります。
パーサー
class LogLine:
SEVERITIES = ['EMERG','ALERT','CRIT','ERR','WARNING','NOTICE','INFO','DEBUG']
severity = 1
def __init__(self, line):
try:
m = re.match(r"^(\d{4}-\d{2}-\d{2}\s*\d{2}:\d{2}:\d{2}),?(\d{3}),?(\s+\[(?:[^\]]+)\])+\s+[A-Z]+\s+(\s?[a-zA-Z0-9\.])+\s?(\((?:\s?\w)+\))\s?(\s?.)+", line)
timestr, msstr, sevstr, self.filename, linestr, self.message = m.groups()
self.line = int(linestr)
self.sev = self.SEVERITIES.index(sevstr)
self.time = float(calendar.timegm(time.strptime(timestr, "%Y-%m-%d %H:%M:%S,%f"))) + float(msstr)/1000.0
dt = datetime.strptime(t, "%Y-%m-%d %H:%M:%S,%f")
except Exception:
print 'error',self.filename
def get_time(self):
return self.time
def get_severity(self):
return self.sev
def get_message(self):
return self.message
def get_filename(self):
return self.filename
def get_line(self):
return self.line
ソーター
class LogFile:
def __init__(self,filepath):
self.logfile = open(filepath, "r")
self.head = None
def __str__(self):
return "x=" + str(self.x) + "y="+str(self.y)
def readline(self):
if self.head != None:
h = self.head
self.head = None
return h
else:
return self.logfile.readline().rstrip(' ')
def get_line(self):
if self.head == None:
self.head = self.readline().rstrip(' ')
return self.head.get.line()
else:
return self.head.get.line()
def close (self):
self.logfile.close()
get_line 関数を追加して、2 番目のクラスの編集を開始しました。私が正しい軌道に乗っているかどうかはわかりません。
簡単に言えば、頭が「LogLine」になる必要があります