【发布时间】:2017-01-10 16:11:12
【问题描述】:
我想获取当前日期的错误日志文件中的异常计数。下面是log sn-p
10.01.2017 14:03:15.517 *Error* [10.207.11.183 [1481704390201] POST /bin/flipkart/cart.GetCart.json HTTP/1.1] org.apache.cxf.services.StockServiceService.StockServicePort.StockService Inbound Message at com.day.j2ee.servletengine.HttpListener$Worker.run(HttpListener.java:644)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NumberFormatException: For input string: "true"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:441)
at java.lang.Long.parseLong(Long.java:483)
10.01.2017 14:03:15.516 *INFO* [10.207.11.183 [1481704390201] POST /bin/flipkart/cart.GetCart.json HTTP/1.1] org.apache.cxf.services.StockServiceService.StockServicePort.StockService Inbound Message at com.day.j2ee.servletengine.HttpListener$Worker.run(HttpListener.java:644)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NumberFormatException: For input string: "true"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:441)
at java.lang.Long.parseLong(Long.java:483)
09.01.2017 14:03:15.514 *INFO* [10.207.11.183 [1481704390201] POST /bin/flipkart/cart.GetCart.json HTTP/1.1] org.apache.cxf.services.StockServiceService.StockServicePort.StockService Inbound Message at com.day.j2ee.servletengine.HttpListener$Worker.run(HttpListener.java:644)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NullPointerException: For input string: "true"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:441)
at java.lang.Long.parseLong(Long.java:483)
如果我运行以下 grep 命令,它会给我结果
$ grep -c $(date +"%d.%m.%Y") error.log
但是当我尝试使用 'Exception' 关键字进一步搜索它时,它不起作用。下面是命令
$ grep -c $(date +"%d.%m.%Y") error.log | grep 'Exception'
其次,我想获取相同异常行的计数,我正在使用此命令
$ grep $(date +"%d.%m.%Y") error.log | sort | uniq -c | sort -r
但在例外情况下,我在 1 月 10 日日期的两行都得到“1”“1”计数,因为毫秒(14:03:15.517,14:03:15.516)值不同。有什么方法可以跳过第二个值并找到行数
输出:-
1 10.01.2017 14:03:15.517 *Error* [10.207.11.183 [1481704390201] POST /bin/flipkart/cart.GetCart.json HTTP/1.1] org.apache.cxf.services.StockServiceService.StockServicePort.StockService Inbound Message at com.day.j2ee.servletengine.HttpListener$Worker.run(HttpListener.java:644)
1 10.01.2017 14:03:15.516 *Error* [10.207.11.183 [1481704390201] POST /bin/flipkart/cart.GetCart.json HTTP/1.1] org.apache.cxf.services.StockServiceService.StockServicePort.StockService Inbound Message at com.day.j2ee.servletengine.HttpListener$Worker.run(HttpListener.java:644)
预期输出:-
2 10.01.2017 14:03:15 *Error* [10.207.11.183 [1481704390201] POST /bin/flipkart/cart.GetCart.json HTTP/1.1] org.apache.cxf.services.StockServiceService.StockServicePort.StockService Inbound Message at com.day.j2ee.servletengine.HttpListener$Worker.run(HttpListener.java:644)
【问题讨论】:
-
你的预期输出是什么?
-
因为包含字符串
exception的行是与您当前日期匹配的下一行 -
那么我如何在linux中使用命令来获取它
-
正则表达式中的
.表示任何字符,因此如果您尝试 grep 查找像10.01.2017这样的日期,它实际上将匹配像010201320175这样的任何字符串。您需要转义.s 或使用-F进行字符串匹配而不是正则表达式匹配,并考虑添加其他构造以避免其他部分匹配。