我尝试使用Racket解析日志文件,逐行读取日志文件,如下所示
(define (read-next-line-iter file)
(let ((line (read-line file)))
(unless (eof-object? line)
(filter-log line)
(read-next-line-iter file))))
(define (filter-log line)
(match line
[(regexp #rx"errCode *:") (display line)]
[_ (void)]))
(call-with-input-file "lines2read.log" read-next-line-iter)
但是,在某些匹配案例中,有相关的上下文。日志文件的一些内容将是
[I][2014-12-11 +8.0 10:24:50.150][3518, 127][OnGYNetEnd][, , 0][onGYNetEnd after post to worker netId:0, errType:0, errCode:0, isCancel:false, hashcode:1130102720
[I][2014-12-11 +8.0 10:24:50.150][3518, 127][OnGYNetEnd][, , 0][blabla, this line not important]
[I][2014-12-11 +8.0 10:38:12.743][3518, 127][APAuth][, , 0][onGYNetEnd : errType : 4, errCode : -100, errMsg : hit push hold!!
[I][2014-12-11 +8.0 10:38:12.743][3518, 127][APAuth][, , 0][THIS LINE IS IMPORTANT, WE NEED TO GRAP IT!
[I][2014-12-11 +8.0 10:38:12.743][3518, 127][APAuth][, , 0][THIS LINE IS IMPORTANT TOO, WE NEED TO GRAP IT!
以上面的日志文件为例:
errCode
为0
,且下一行与regexp
个案例不符,则忽略。 errCode
不 0
,则接下来的两行与regexp
个案例不匹配,打印 怎么做?
答案 0 :(得分:1)
您需要将“状态”编码为显式值。所以,例如,听起来你需要知道
看起来在这里跟踪前两个错误代码就足够了;我会将此作为read-next-line-iter
函数的显式参数添加。你必须考虑文件开头应该是什么。