로그 파싱하는 코드
툴을 만들때, 트레이스 등을 확인할 때 종종 로그파일을 파싱하게 된다. 로그 파싱 예제. 헤더를 읽고 다음 헤더가 나올 때까지를 바디로 보고 읽어 오브젝트에 저장한다. 초기 버전 코드라, 계속 손은 봐야함.
LogParser.prototype.parse = function( fpath, stime, etime, session_id)
{
var o = [];
var br = java.io.BufferedReader( new java.io.FileReader( fpath));
var log = {};
log.hdr = null;
log.body = "";
log.linenum = null;
var sb = new java.lang.StringBuilder();
var line = null;
var linenum = 0;
while(( line = br.readLine()) != null)
{
linenum++;
if( log.hdr == null) {
var match = this.hdrRegex.exec( line);
line = br.readLine(); linenum++;
var hdr = this.matchHeader( match, line);
log.hdr = hdr;
log.linenum = linenum;
// read raw body
line = br.readLine(); line = br.readLine(); line = br.readLine(); line = br.readLine(); linenum = linenum+4;
var sb = new java.lang.StringBuilder();
while(true)
{
line = br.readLine();
if( line == null) break;
linenum++;
var hdrMatch = this.hdrRegex.exec( line);
if( hdrMatch != null) {
line = br.readLine();
linenum++;
log.body = sb.toString();
if( log.hdr.session_id == session_id) {
o.push( log);
}
// initialize log
log = {}; log.hdr = this.matchHeader( hdrMatch, line); log.body = ""; log.linenum = linenum;
break;
} else {
sb.append( line).append("\n");
}
}
} else {
// just read raw body
line = br.readLine(); line = br.readLine(); line = br.readLine(); line = br.readLine(); linenum = linenum+4;
var sb = new java.lang.StringBuilder();
while(true)
{
line = br.readLine();
if (line ==null) break;
linenum++;
var hdrMatch = this.hdrRegex.exec( line);
if( hdrMatch != null) {
line = br.readLine();
linenum++;
log.body = sb.toString();
if( log.hdr.session_id == session_id) {
o.push( log);
}
// initialize log
log = {}; log.hdr = this.matchHeader( hdrMatch, line); log.body = ""; log.linenum = linenum;
break;
} else {
sb.append( line).append("\n");
}
}
}
}
if (log.hdr != null && log.hdr.session_id == session_id) {
o.push( log);
} else {
}
return o;
}