作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目标是获得如下输出,其中包含每个文件的文件名和错误计数。
/var/log/file2.log:5
/var/log/file3.log:7
/var/log/file5.log:3
/var/log/file7.log:2
假设有很多名为“*.log
”的日志文件,并且所有文件的格式如下。
2021-03-16 01:01:01.001 ERROR 1234 --- [main] com.example.ClassAAAA : real error
2021-03-16 01:01:01.001 INFO 1234 --- [main] com.example.ClassAAAA : message
2021-03-16 01:01:01.001 ERROR 1234 --- [main] com.example.LibBB : real error
2021-03-16 01:01:01.001 INFO 1234 --- [main] com.example.LibBB : message
2021-03-16 01:01:01.001 ERROR 1234 --- [main] com.example.ClassCCCCCC : real error
2021-03-16 01:01:01.001 ERROR 1234 --- [main] com.example.ClassCCCCCC : real error
2021-03-16 01:01:01.001 INFO 1234 --- [main] com.example.ClassCCCCCC : message
2021-03-16 01:01:01.001 ERROR 1234 --- [main] com.example.ClassD : false alert
2021-03-16 01:01:01.001 INFO 1234 --- [main] com.example.ClassD : message
2021-03-16 01:01:01.001 ERROR 1234 --- [main] com.example.LibEEE : false alert
2021-03-16 01:01:01.001 INFO 1234 --- [main] com.example.LibEEE : message
2021-03-16 01:01:01.001 ERROR 1234 --- [main] com.example.LibFFFFF : false alert
2021-03-16 01:01:01.001 ERROR 1234 --- [main] com.example.LibFFFFF : false alert
2021-03-16 01:01:01.001 INFO 1234 --- [main] com.example.LibFFFFF : message
主要问题是有一些已知的错误警报不应计算在内。
例如,我们希望统计除ClassD
之外的任何类记录的错误。 , LibEEE
和 LibFFFFF
通过以下命令。
grep -Pc '^.* ERROR .*((?<!(ClassD|LibEEE|LibFFFFF)).)*$' *.log | grep -v :0
但它不起作用,并打印出以下错误。
grep: lookbehind assertion is not fixed length
如果有效,上面示例日志片段的计数将为 4,由 ClassAAAA
记录, LibBB
和 ClassCCCCCC
分别。
衷心感谢大家花时间分享您的想法。我进入 lookbehind 的思考集的原因是我最初想用“\s*:
”来限定类名,但最终错过了空格和冒号。
虽然目前可以实现目标,但很好奇 - 在这种情况下是否可以使用 lookbehind?
最佳答案
这应该是 awk
的任务,请您尝试执行以下操作。使用 GNU awk
中显示的示例编写和测试。您可以将多个文件传递给此命令,它将逐个文件地打印文件(文件名和错误计数如示例所示)。
awk '
BEGIN{ OFS=":" }
FNR==1{
if(count){
print FILENAME,count
}
count=0
}
/ERROR/ && !/ClassD|LibEEE|LibFFFFF/{
count++
}
END{
if(count){
print FILENAME,count
}
}
' *.log
说明: 为以上添加详细说明。
awk ' ##Starting awk program from here.
BEGIN{ OFS=":" } ##Setting OGFS to colon in BEGIN section of this program.
FNR==1{ ##Checking condition if this is first line then do following.
if(count){ ##Checking if count is not null then.
print FILENAME,count ##Printing file name with OFS and count value here.
}
count=0 ##Setting count to 0 here.
}
/ERROR/ && !/ClassD|LibEEE|LibFFFFF/{ ##checking condition if line does not contain ClassD, LibEEE and LibFFFFF then do following.
count++ ##Increase count with 1 here.
}
END{ ##Starting END block of this program from here.
if(count){ ##Checking if count is not null then.
print FILENAME,count ##Printing file name with OFS and count value here.
}
}
' *.log ##Passing all .log files to program here.
关于regex - 如何从日志文件中 grep 错误但过滤掉错误警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66652755/
我正在编写一个快速的 preg_replace 来从 CSS 中删除注释。 CSS 注释通常有这样的语法: /* Development Classes*/ /* Un-comment me for
使用 MySQL,我有三个表: 项目: ID name 1 "birthday party" 2 "soccer match" 3 "wine tasting evening" 4
我是一名优秀的程序员,十分优秀!