2011-11-14 2 views
1

지난 5 분 이내에 기록 된 Java 응용 프로그램 로그 (log4j 사용)를 분석하려고합니다. 파이썬을 사용하여 지난 5 분 동안 경고를 분석하고 메일을 보내야합니다.지난 5 분 Python을 사용하여 Log4j 로그 분석

아무도 나에게 제안 할 수 있습니까? 지난 5 분간 로그 라인을 얻는 가장 좋은 방법은 무엇입니까?

저는 이것을 위해 파이썬을 사용해야합니다.

로그 형식은

2011-11-14 10:15:46 WARN : sample warning 
2011-11-14 10:15:47 WARN : sample warning 
2011-11-14 10:15:48 WARN : sample warning 
2011-11-14 10:15:49 WARN : sample warning 

답변

0

분석 "마지막 5 분"정말 많은 이해가되지 않습니다, 다음과 같습니다. 그것이 나라면 무언가를 끊임없이 실행하고 매 5 분마다 경고음을 제한합니다.

(파일에 log4j 쓰기를 사용한다고 가정 할 때) 파이썬 코드에서 파일 입출력을 처리 할 수 ​​있지만 '꼬리'를 사용하여 파일을 스크립트로 파이프하는 것이 더 쉽습니다. 분명히 당신은 회전하는 로그 파일을 다루는 방법을 계획 할 필요가있을 것입니다. 아마도 이것에 대한 메커니즘을 이미 가지고있을 것입니다. 회전 후에 파일 핸들을 다시 열기 위해 파이썬 코드에 지시해야 할 필요가 있습니다.

파이프를 사용하여 파이썬 스크립트로 데이터를 보내는 것이 훨씬 쉬울 수 있습니다. python handle the rotation.

어느 쪽이든, 어떤 로그 메시지도 없을 때 체크 이벤트를 강요하기 위해, don't forget to add a SIGALRM. 로그 파일은 시간 순으로 정렬되어 있기 때문에

+0

지속적으로 실행. 하지만 오랜 시간 동안 끊임없이 쉘 스크립트를 실행하는 데 나쁜 경험이 있습니다. 그들은 시간이 지나면 매달릴 것이기 때문에. 그것으로 5 분 안에 프로그램을 한 번 실행하여 cron에 넣을 계획입니다. SIGALARM에 대해 언급 해 주셔서 감사합니다. 내가 파이썬을 처음 접했을 때 나는 SIGALARMS를 사용하지 않았다. 당신의 아이디어에 감사드립니다. – user1045612

3

, 당신은 완전히 구문 분석해야합니다 : 처음에 나는 또한 프로그램의 생각

from datetime import datetime, timedelta 
now = datetime.now() 
lookback = timedelta(minutes=5) 
oldest = (now - lookback).strftime('%Y-%m-%d %H:%M:%S') 

lines = [] 

with open('logfile.log', 'r') as f: 
    for line in f: 
     if line[:19] > oldest: 
      lines.append(line) 

if lines: 
    message = '\n'.join(lines) 
    # send message per mail... 
+0

고마워요. 이것은 나를 도왔고 내 문제를 해결합니다. 이 프로세스를 효율적으로 수행하려면 파일 끝에서 읽는 것이 좋습니다. – user1045612

+0

'f.seek (...) '로 재생할 수 있으며 탐색하고자하는 파일 내에서 좋은 바이트 위치를 찾을 수 있습니다. 파일 크기 및 업데이트 빈도에 따라 다릅니다. – eumiro