目录

Nginx日志主要分为两种:

access_log(访问日志):

自定义一个一个log_format并使用的方法:

log_format变量:

error_log(错误日志):


Nginx日志主要分为两种:

access_log(访问日志):记录客户端请求的信息。

error_log(错误日志):记录应用程序问题等信息。

access_log(访问日志):

客户端向Nginx服务器发起的每一次请求都记录在这里。每条记录都包含一个时间戳,包含有关客户端和所请求资源等信息,例如客户端IP、浏览器信息、请求URL等,具体要记录的可以自定义设置,即通过log_format指令定义,下面先介绍两个指令。

access_log off; #关闭当前作用域下的所有日志

access_log log_file log_format;#设置日志文件的位置和使用的格式

在第二条指令中log_file是日志文件的绝对路径,log_format是日志文件记录的格式。可以在http、server、location等指令的上下文中启用访问日志。

log_format默认使用Nginx主配置文件中的http指令上下文配置的全局访问日志格式,一般情况下每个server都会有自己单独的,在server中配置后,其优先级比http下的高。

http {
  access_log  /home/sdc/public/app/nginx/access.log;
......
  server {
    server_name test.com
    access_log /home/sdc/public/app/nginx/domain.access.log;
    ......
  }
}

如果都没有指定log_format,会自动使用系统默认名为combined的:

log_format combined '$remote_addr - $remote_user [$time_local]'
                    '"$request" $status $body_bytes_sent'
                    '"$http_referer" "$http_user_agent"';

自定义一个一个log_format并使用的方法:

log_format  sdc '$remote_addr - $remote_user [$time_local] "$request"';

然后作用域中配置:

access_log /home/sdc/public/app/nginx/access.log sdc;

log_format变量:

  • $body_bytes_sent:传输到客户端的字节数,不包括响应头,变量与Apache模块mod_log_config的参数%B兼容(在版本0.3.10之前称为$Apache_bytes_sent)
  • $bytes_sent:传输到客户端的字节数
  • $connection:连接数
  • $msec:日志输入时时间精确到微秒
  • $request_length:请求的正文的长度
  • $request_time:处理请求的时间(秒)
  • $request:请求的URL以及请求方法,例如GET / HTTP/1.1
  • $status:应答状态,例如200、301、404等
  • $time_local:将本地时间转换为通用日志格式
  • $time_iso8601:标准格式的本地时间,例如如2022-10-03T13:33:09+08:00
  • $remote_addr:客户端的IP地址(代理服务器,显示代理服务器的IP),例如10.1.23.137
  • $remote_user:针对启用了用户认证的请求,记录远程客户端的HTTP身份验证用户名称
  • $http_user_agent:客户端浏览器信息
  • $http_x_forwarded_for:客户端IP,通过代理服务器的请求来记录客户端的IP地址。当前端有代理服务器时,设置记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置。
  • $http_referer:用户是从哪个链接访问的

error_log(错误日志):

它也是在http,server或location指令的上下文中设置,一般写法如下:

error_log log_file log_level;

其中log_file为错误日志存放的绝对路径。

log_level为日志级别,从详细到简略分别是:debug、info 、notice 、warn 、error 、crit 、alert 、emerg,默认的是error。 一般情况下每个server都会有自己单独的,在server中配置后,其优先级比http下的高。

http {
  error_log  /home/sdc/public/app/nginx/error.log;
......
  server {
    server_name test.com
    error_log /home/sdc/public/app/nginx/test_error.log debug;
    ......
  }
}