题
我有一个日志文件,它显示了我的网站的所有控制台日志范围10.Oct到1.Nov,从10.Oct的日志开始。
我需要从25.Oct到今天的所有日志。
问题是有一个巨大的例外。 每天我得到超过21行的IOException,而对于6030个用户,所以大概有126'600行代码,我不会看到; 每天。
所以我需要过滤输出才能够正常读取日志。
我已经尝试过了:
less catalina.out | grep -v "java.io.IOException: Server returned HTTP response code: 401 for URL"
该日志文件被称为catalina.out 。 但是,这不是我的代码不隐藏exception,我不能够滚动输出。
所以我做错了什么? 代码应该如何?
关于我的信息
我不熟悉Linux。 我在一个支持小组工作,但今天我一个人和一个网站出了点麻烦。 所以我需要自己解决。
我现在通过45分钟谷歌,但没有得到它,问题hurrys …所以,请耐心等待我…
INFO是关于这个问题的
这里所有关于我的问题的事实和信息:
日志文件名:catalina.out
我想隐藏每天重复6030次的整个IOException:
java.io.IOException: Server returned HTTP response code: 401 for URL: http://secure.intern.webpage/userpicture/u117054.jpg at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1625) at java.net.URL.openStream(URL.java:1037) at ch.sbb.wzuapp.business.batch.PersonCleanupNightlyJob.downloadUrl(PersonCleanupNightlyJob.java:270) at ch.sbb.wzuapp.business.batch.PersonCleanupNightlyJob.downloadPic(PersonCleanupNightlyJob.java:245) at ch.sbb.wzuapp.business.batch.PersonCleanupNightlyJob.doCleanup(PersonCleanupNightlyJob.java:76) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:64) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53) at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722)
每个例外中唯一改变的就是照片名称。 其他一切都是一样的。
好吧,真正有趣的问题,因为它需要在pipe道的末端运行。 可能有更简单的方法来做到这一点,但我发现这个工作(并使用系统pipe理员的瑞士军队电锯 ,Perl):
tail -f catalina.out | perl -n -e '{ if (/^java.io.IOException: Server returned HTTP response code: 401/) { $ignore=1;} elsif ($ignore>=1 and $ignore<20) {$ignore++;} else {$ignore=0; print $_;} }'
基本上,它一步一步地通过STDIN一行,查找searchstring(“ ^ java.io.IOException:服务器返回的HTTP响应代码:401 ”)。 在find之前,它会打印出每一行。 一旦find,它就开始计数到20,每进入一个新行一次,在计数的时候什么也不打印; 一旦计数达到20,它重置计数为零,并恢复打印每一个新的行。
编辑 :没问题。 从tail -100000f catalina.out | ...开始tail -100000f catalina.out | ... tail -100000f catalina.out | ...或者如果日志文件的行数超过这个数量的话,的确是一个更大的数字。 如果你不想看到添加的新东西,请尝试
perl -n -e '{ if (/^java.io.IOException: Server returned HTTP response code: 401/) { $ignore=1;} elsif ($ignore>=1 and $ignore<20) {$ignore++;} else {$ignore=0; print $_;} }' < catalina.out.
它被devise用于stream水线,所以你可以提供任何你想剥离的东西,你可以发送输出到任何需要它。 这是UNIX的方式!
grep知道把文件作为参数。 请检查那个男人。 你可以使用egrep ,而不是grep -e (这是相同的):
# egrep -v '^java.io|^\ {8}at' catalina.out | less
如果你想完全忽略exception,你可以试试这个:
cat catalina.out | grep -v -e '^java.io.IOExc' -e ' at ' | less
(用一个标签replace7个空格[Ctrl + V然后Tab]如果不起作用)
如果需要更多的移除,我们将开始perl-grepping。