ruby를 사용하여 로그 파일 파서를 만들고 싶습니다.이 파서가 커지는 동안 로그 파일을 구문 분석해야합니다. 그것은 끝날 때까지 라인마다 구문 분석해야하고 기다리는 (어쨌든?) 더 많은 라인을 올 수 있도록, 내 질문에 어떻게 성장을 최상으로 처리하는 것입니다?증가하는 로그 파일 구문 분석
편집 : 내 로그 파일이 Windows에 있더라도이 휴대용 방식을 선호합니다.
ruby를 사용하여 로그 파일 파서를 만들고 싶습니다.이 파서가 커지는 동안 로그 파일을 구문 분석해야합니다. 그것은 끝날 때까지 라인마다 구문 분석해야하고 기다리는 (어쨌든?) 더 많은 라인을 올 수 있도록, 내 질문에 어떻게 성장을 최상으로 처리하는 것입니다?증가하는 로그 파일 구문 분석
편집 : 내 로그 파일이 Windows에 있더라도이 휴대용 방식을 선호합니다.
Windows의 경우 Directory Change Notifications을 사용할 수 있습니다. Windows에 (FindFirstChangeNotification으로) 디렉토리 c :/foo/logs를 모니터하도록 말하면, Windows는 그 디렉토리에서 어떤 일이 발생했을 때 핸들을 갱신합니다. 이때 변경 사항에 관심이있는 파일이 포함되어 있는지 확인합니다.
Ruby에는 Win32 API 바인딩이 있으며이 알림을 가져 오는 데는 an example이 있습니다.
http://www.biterscripting.com/SS_WebLogParser.html에 게시 된 좋은 스크립트가 있습니다. 이 스크립트는 웹 서버 로그 용으로 작성된 샘플 스크립트이지만 모든 종류의 로그에 대해 자체 로그 파서를 작성하는 시작점으로 사용할 수 있습니다. 지속적으로 사용하려면 로그 파일이 계속 커지는 동안 여기 스크립트가 필요합니다.
# Script LogParser.txt
# Go in a continuous loop, sleeping 1 hr each time.
while (true)
do
# The number of lines in the log file the last time we checked is in following
# variable. Initially, it will be 0.
var int lines_old
# Read the log file into a str variable.
var str log ; cat "file.log" > $log
# Get the number of lines found this time.
var str lines_new ; set $lines_new = { len -e $log }
# Strip off the first $lines lines.
lex -e (makestr(int($lines))+"]") $log > null
# The new lines are now available in $log. Process them with something similar to
# SS_WebLogParser script.
# Update $lines_old, then, sleep.
set $lines_old = $lines_new
sleep 3600 # 3600 seconds = 1 hour
done
시도하려면,
다음 명령을 입력하여 스크립트를 호출하십시오.
스크립트 "\ LogParser.txt"
당신이 자신의 샘플 스크립트 중 하나를 사용하여 다음 명령으로 설치해야하는 경우
. 패트릭script "http://www.biterscripting.com/Download/SS_AllSamples.txt"
이 작업을 위해 당신은 명령 라인의 성장 결과의 파이프에서 파일 스트림을 얻을 수 IO.popen를 사용할 수 있습니다. 그런 다음 while 루프에서 readline 함수를 사용하십시오. 가 여기에 안드로이드 장치의 라이브 성장 로그를 얻을 "ADB 로그 캣"명령을 예입니다 : 파일에 대한
#! /usr/bin/env ruby
IO.popen("adb logcat") do |io|
while line = io.readline
line.strip!
# Process here
print "#{line}\n"
end
end
편집
, 그것은 조금 다르다. 필자는 파일 스트림을 폴링 할 때 "readline"을 사용합니다.
#! /usr/bin/env ruby
File.open("test.log") do |io|
loop do
begin
line = io.readline
line.strip!
rescue
sleep 0.2
retry
end
# Process here
print "#{line}\n"
end
end