로그 파일을 통해 ERROR 항목을 확인해야하는 스크립트를 BASH에 작성하고 있습니다. 나는 이것을 매시간 cron으로 실행할 계획이므로 마지막 시간 (모든 서버 시간은 GMT) 내에 발생한 ERROR 유형 항목 만 리턴하고 싶을뿐입니다. 나는 다음과 같은 변수 BASH에서 로그 파일을 분석하여 특정 시간 스탬프 사이에 "ERROR"항목을 찾으십시오.
# Log file directory
LOGPATH="/path/to/logs/"
# Current date and time
CURDATE=`date +%Y-%m-%d`
CURTIME=`date +%H:%M:%S`
# Old date and time
OLDDATE=`date +%Y-%m-%d -d "1 hour ago"`
OLDTIME=`date +%H:%M:%S -d "1 hour ago"`
파일 년/월/일이 항목에 기록 된 날짜로 대체됩니다 ktYEAR 개월 DAY.root.log.txt의 파일 이름 형식을 준수 모든 로그
을 설정합니다. 예를 들어, 오늘의 로그 파일은 kt2011-08-15.root.log.txt입니다. "ERROR"가 값이 때 내용의 예 항목은2011-08-15 | 19:30:02 | ERROR | 18333 | 337 | n/a | dms | default | error | XMLRPC Lucene - addDocument - Reason: Failed to parse XML-RPC request: An invalid XML character (Unicode: 0xb) was found in the element content of the document.
관심의 열은 1 일, 2, 3 (가치 등 "INFO", "DEBUG"을 할 수 있습니다,하지만 관심이있다) 및 로그 메시지의 본문 인 마지막 열.
내가 이루고자하는 것은이 BASH 스크립트가 활동의 마지막 1 시간에 걸친 항목 (1 열 및 2 열에서 정의 된대로)에 걸쳐있는 파일을 파싱하는 것입니다. 그리고 네 번째 열에 문자열 "ERROR", 가장 오른쪽 열의 내용을 표시합니다. 내 혼란은 $CURTIME
$OLDTIME
을 기반으로 로그 파일을 구문 분석하는 방법을 결정할 때 발생합니다. 자정이되면 악화되어 전날 로그 파일을 검색해야합니다. 수량과 크기가 과도 할 수 있기 때문에 모든 로그 파일을 통해 포괄적 인 grep 스타일 검색을하지 않는 것을 선호하지만, 그렇게해야한다면 어떻게 할 수 있습니까?
로그 형식은 log4j의 출력과 같습니다. 이 경우 오류 메시지 만 포함 된 새 출력 파일을 만드는 것이 좋습니다. – jfg956