Find recent logs that contain the string 'Exception' —19 July 2014
This simple bash one-liner will find recent logs that contain the string ‘Exception’ and print the count of matches:
find . -name '*.log' -mtime -2 -exec grep -Hc Exception {} \; | grep -v :0$
The find
:
-name '*.log'
– match files ending with.log
-mtime -2
– match files modified within the last 2 days-exec CMD ARGS \;
– for each file found, execute command, where{}
inARGS
will be replaced with the file’s path
The grep
:
-c
is to print the count of the matches instead of the matches themselves-H
is to print the name of the file, asgrep
normally won’t print it when there is only one filename argument- The output lines will be in the format
path:count
. Files that didn’t match “Exception” will still be printed, with 0 as count - The second
grep
filters the output of the first, excluding lines that end with:0
(= the files that didn’t contain matches)
Extra tips:
- Change “Exception” to the typical relevant failure indicator of your application
- Add
-i
forgrep
to make the search case insensitive - To make the
find
match strictly only files, add-type f
- Schedule this as a periodic job, and email the output to yourself by piping to a mailer, for example
| mailx -s 'error counts' yourmail@example.com
Limitations:
The -H
flag of grep
may not work in older operating systems, for example older Solaris. In that case use ggrep
(GNU grep) instead, if it exists.