1. access_log
  2. error_log

日志输出

通过 nginx 配置即可对某一个 server 进行日志的记录。

  1. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  2. '$status $body_bytes_sent "$http_referer" '
  3. '"$http_user_agent" "$http_x_forwarded_for"';
  4. access_log /var/log/nginx/access.log main;
  5. error_log /var/log/nginx/error.log;

log_format

参数 说明 示例
$remote_addr 客户端地址 211.28.65.253
$remote_user 客户端用户名称
$time_local 访问时间和时区 18/Jul/2012:17:00:01 +0800
$request 请求的 URI 和 HTTP 协议 “GET /article-10000.html HTTP/1.1”
$http_host 请求地址,即浏览器中你输入的地址(IP 或域名) www.it300.com、192.168.100.100
$status HTTP 请求状态 200
$upstream_status upstream 状态 200
$body_bytes_sent 发送给客户端文件内容大小 1547
$http_referer url 跳转来源 https://www.baidu.com/
$http_user_agent 用户终端浏览器等信息 “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocol SSL 协议版本 TLSv1
$ssl_cipher 交换数据中的算法 RC4-SHA
$upstream_addr 后台 upstream 的地址,即真正提供服务的主机地址 10.10.10.100:80
$request_time 整个请求的总时间 0.205
$upstream_response_time 请求过程中,upstream 响应时间 0.002

日志切割

通过命令

access.log

  1. mv access.log bak.log
  2. nginx -s reopen

这样子就是将原来的日志文件 copy 了一份,然后重新加载 nginx 的配置。

这个操作可以实现日志切割拆分,但是很僵硬,我们平时可能就需要每周、每天拆分一次。

通过 shell 脚本

将上面的命令放到 sh 文件中,通过定时任务,每天执行一下脚本。

日志查看和查询

由于你在看日志的时候,有时候需要实时的查看,所以不能像我们之前一样使用 vim 或者 cat来查看。

tail

  1. # 查看 access.log 文件的最后10行
  2. tail access.log
  3. # 实时跟踪查看 access.log
  4. tail -f access.log

cat

  1. # 基础命令
  2. # 一次显示整个文件
  3. cat filename
  4. # 创建一个文件
  5. cat > filename
  6. # 将几个文件合并为一个文件
  7. cat file1 file2 > file

语法

  • -n 由1开始对所有输出的行数编号
  • -b-n 相似,只不过对于空白行不编号
  • -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
  • -c <数目> 显示字节数
  • -n <行数> 显示行数

应用

  • 1)cat test.log | tail -n 1000 #输出test.log 文件最后1000行
  • 2)cat -n test.log |grep debug #得到关键日志的行号
  • 3)cat filename | tail -n +3000 | head -n 1000 #从第3000行开始,显示1000行。即显示3000~3999行
  • 4)cat filename| head -n 3000 | tail -n +1000 #显示1000行到3000行
  • 5)cat -n textfile1 > textfile2 #把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
  • 6)cat -b textfile1 textfile2 >> textfile3 #把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里
  • 7)
  1. cat error.log | grep -C 5 'nick' 显示file文件里匹配foo字串那行以及上下5
  2. cat error.log | grep -B 5 'nick' 显示foo及前5
  3. cat error.log | grep -A 5 'nick' 显示foo及后5

使用 cat 和 grep 最常用组合

  1. # 直接查看
  2. cat -n access.log | grep 14:15
  3. # 放到文件中,以便于后续查看
  4. cat -n access.log | grep 14:15 >test.txt