只顯示nginx訪問日誌中返回500狀態碼的日誌行:css
tail -f access_log.log | grep 500 --color
注意: tail -f 以後,只能使用管道一次,以下命令將無任何輸出nginx
tail -f access_log.log | grep 500 | grep 500
好比,nginx日誌格式爲:正則表達式
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
日誌內容爲:tomcat
192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /tomcat.png HTTP/1.1" 304 0 "http://192.168.1.9/" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-" 192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /favicon.ico HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-" 192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /bg-nav.png HTTP/1.1" 304 0 "http://192.168.1.9/tomcat.css" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-" 192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /bg-upper.png HTTP/1.1" 304 0 "http://192.168.1.9/tomcat.css" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-" 192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /bg-middle.png HTTP/1.1" 304 0 "http://192.168.1.9/tomcat.css" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-" 192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /bg-button.png HTTP/1.1" 304 0 "http://192.168.1.9/tomcat.css" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-" 192.168.1.114 - - [13/Apr/2011:15:19:37 +0800] "GET / HTTP/1.0" 200 12220 "-" "-" "-" 192.168.1.114 - - [13/Apr/2011:15:20:22 +0800] "GET / HTTP/1.0" 200 12220 "-" "-" "-"
需求:標出返回狀態碼非200的請求日誌
若是用grep只能用過濾方式,以下命令:code
grep -v "200" access_log.log
用sed能夠用顏色標出非200的狀態碼:orm
爲了拼出sed的正確正則表達式,咱們先從標記200爲綠色開始圖片
sed 's/200/\x1b[32m&\x1b[0m/g' access_log.log
說明:echo打印彩色字符時,使用八進制符號\033,可是在sed中不支持八進制,必須使用16進制:\x1brem
下一步,把狀態碼3XX標爲黃色:form
sed 's/3[0-9][0-9]/\x1b[33m&\x1b[0m/g' access_log.log
但請注意,nginx日誌行中其餘地方也有數字,上面的匹配不夠精確
下一步,把HTTP/1.0" 或者 HTTP/1.1"以後的3位數標記顏色:
sed 's/\(HTTP\/1\.[01]" \)\(3[0-9][0-9]\)/\1\x1b[33m\2\x1b[0m/g' access_log.log
再下一步,若是狀態碼以後的返回數據量大於1K,就標記紅色:
sed 's/\(HTTP\/1\.[01]" [0-9][0-9][0-9] \)\([0-9]\+\)[0-9][0-9][0-9]/\1\x1b[31m[\2KB]\x1b[0m/g' access_log.log