Nginx日志格式不生效

简介: Nginx日志格式不生效

1.案例现象

启动 Nginx,运行一段时间发现 access 日志并没有遵循我们的配置的日志格式所输出

2.定位问题

日志没有按照格式输出,很大原因就是 Nginx 配置有问题

查看一下 Nginx 的配置,重点关注一下日志配置字段

cat /etc/nginx/nginx.conf
     log_format  main  '"$time_local" "$remote_addr" "$request" "$request_time" "$upstream_response_time" "$upstream_addr" '
                      '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"';

   # access_log  /var/log/nginx/access.log  main;

这么看日志格式配置好像没有什么问题

我们去看下Nginx官网是怎么说的吧
image-20220921083731097.png
上面这两张图片所讲的内容大概就是:

  1. Nginx预定义了名为combined日志格式,如果没有明确指定日志格式默认使用该格式
  2. 如果自定义日志格式,要想使其生效,就必须用 access_log 指定调用
  3. 如果自定义了日志格式但是没有使用 access_log 调用,依旧是用的默认格式
  4. http段也必须明确指定调用main格式才会生效,否则还是会调用默认的combined格式

我们通过不同日志配置场景来分别验证一下:

  1. 没有配置日志格式字段,access_log也没有指定调用
  2. 配置默认日志格式字段,access_log没有指定调用
  3. 配置默认日志格式字段,access_log有指定调用
  4. 配置自定义格式字段,access_log没有指定调用
  5. 配置自定义格式字段,access_log有指定调用
  • 没有配置日志格式字段,access_log也没有指定调用
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
access_log /var/log/nginx/access.log;
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    ...
}

实时查看 nginx access.log,然后去访问 Nginx,日志输出如下:

192.168.149.131 - - [21/Sep/2022:08:57:37 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.149.131 - - [21/Sep/2022:08:57:38 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0"
  • 使用Nginx默认日志格式字段,access_log没有指定调用
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
access_log /var/log/nginx/access.log;
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
}

实时查看 nginx access.log,然后去访问 Nginx,日志输出如下:

192.168.149.131 - - [21/Sep/2022:08:58:02 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.149.131 - - [21/Sep/2022:08:58:05 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0"
  • 配置默认日志格式字段,access_log有指定调用
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
access_log /var/log/nginx/access.log;
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
}

实时查看 nginx access.log,然后去访问 Nginx,日志输出如下:

192.168.149.131 - - [21/Sep/2022:09:02:03 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.149.131 - - [21/Sep/2022:09:02:08 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0"
  • 配置自定义格式字段,access_log没有指定调用
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
access_log /var/log/nginx/access.log;
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '"$time_local" "$remote_addr" "$request" "$request_time" "$upstream_response_time" "$upstream_addr" '
                      '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"';
    
}

实时查看 nginx access.log,然后去访问 Nginx,日志输出如下:

192.168.149.131 - - [21/Sep/2022:09:05:57 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.149.131 - - [21/Sep/2022:09:05:58 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0"
  • 配置自定义格式字段,access_log 有指定调用
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
access_log /var/log/nginx/access.log;
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '"$time_local" "$remote_addr" "$request" "$request_time" "$upstream_response_time" "$upstream_addr" '
                      '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"';
    access_log  logs/access.log  main;
}

实时查看 nginx access.log,然后去访问 Nginx,日志输出如下:

"21/Sep/2022:09:08:45 +0800" "192.168.149.131" "HEAD / HTTP/1.1" "0.000" "-" "-" 200 0 "-" "curl/7.29.0" "-" "0.000" "-"
"21/Sep/2022:15:58:46 +0800" "192.168.149.131" "HEAD / HTTP/1.1" "0.000" "-" "-" 200 0 "-" "curl/7.29.0" "-" "0.000" "-"

总结:

  1. Nginx 预定义了名为 combined 日志格式,如果没有明确指定日志格式默认使用该格式
  2. 配置了日志格式,如果没有指定调用,配置的日志格式是不会生效的

3.解决问题

既然找到问题之后我们在 Nginx 配置文件中加入 access_log 指定调用字段,让自定义的日志格式生效即可

    log_format  main  '"$time_local" "$remote_addr" "$request" "$request_time" "$upstream_response_time" "$upstream_addr" '
                      '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"';
    access_log  logs/access.log  main;
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
901 90
|
11月前
|
存储 安全 应用服务中间件
将下载的Nginx证书转换为Tomcat证书格式
好,可以看到,将Nginx证书转换为Tomcat证书的过程就像在烘焙一块蛋糕。你需要准备材料(证书),配备工具(OpenSSL, keytool),按照一定的步骤慎重制作,最后你就拥有了一块可以在浏览器中呈现出漂亮的安全状态的HTTPS蛋糕。就这么简单,明了,没有任何复杂的理论知识,就像在家庭厨房里烘焙的快乐一样。
437 16
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
1341 3
|
应用服务中间件 nginx
nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
【8月更文挑战第27天】nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
1073 6
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
存储 Ubuntu 应用服务中间件
如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转
如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转
326 4
|
存储 监控 应用服务中间件
查看nginx日志文件
器性能和提高网站可用性。掌握日志文件的路径、查看方法和基本分析技能对于任何服务器管理员来说都是必备技能。
1694 1
|
存储 应用服务中间件 nginx
部署ELK+filebeat收集nginx日志
部署ELK+filebeat收集nginx日志
765 0
部署ELK+filebeat收集nginx日志
|
应用服务中间件 Linux nginx
Nginx log 日志文件较大,按日期生成 实现日志的切割
Nginx log 日志文件较大,按日期生成 实现日志的切割
4313 0
|
应用服务中间件 nginx
[nginx]日志中记录自定义请求头
[nginx]日志中记录自定义请求头
254 0