如何自定义 nginx 错误日志行(省略日期时间和严重性)?

如何自定义 nginx 错误日志行(省略日期时间和严重性)?

我已经配置了我的 nginx 服务器的错误日志如下:

error_log syslog:server=unix:/dev/log,nohostname,tag= notice;

这会导致以下类型的日志行(在 systemd 日志中):

apr 11 22:54:37 hostname [616892]: 2020/04/11 22:54:37 [notice] 616892#0: using the "epoll" event method
apr 11 22:54:37 hostname [616892]: 2020/04/11 22:54:37 [notice] 616892#0: nginx/1.16.1
apr 11 22:54:37 hostname [616892]: 2020/04/11 22:54:37 [notice] 616892#0: OS: Linux 5.4.28
apr 11 22:54:37 hostname [616892]: 2020/04/11 22:54:37 [notice] 616892#0: getrlimit(RLIMIT_NOFILE): 1024:524288
apr 11 22:54:37 hostname [616893]: 2020/04/11 22:54:37 [notice] 616893#0: start worker processes
apr 11 22:54:37 hostname [616893]: 2020/04/11 22:54:37 [notice] 616893#0: start worker process 616895

第一个冒号(apr 11 22:54:37 hostname [616892]在示例中)之前的所有内容均来自操作系统的日志系统(systemd journal),后面的内容由 nginx 提供(例如2020/04/11 22:54:37 [notice] 616892#0: nginx/1.16.1)。如您所见,nginx 提供日期和严重性(notice在示例中)。操作系统的日志系统已捕获这两者。因此,我想指示 nginx 不要将此信息(2020/04/11 22:54:37 [notice])添加到日志行中。但是,我还没有发现这是否可行以及如何实现。我知道该log_format指令存在,但据我所知,它仅适用于访问日志。)

所以,是否可以自定义 nginx 生成的错误日志行?

答案1

不幸的是,date [level] pid#tid message日志模式(即第一个冒号后找到的所有内容:)被硬编码到Nginx(参见源代码)。您将无法通过配置来更改它,您需要重新编译服务器。

你可以改变的(而且你已经在做了)只有系统日志元数据:

  • 您可以使用以下方式关闭发送主机名nohostname
  • SYSLOG_IDENTIFIER你可以通过tag=identifier选项改变

就这样。

答案2

您已经回答了自己的问题。您无法自定义错误日志格式,只能自定义访问日志格式日志模块文档

对于错误日志,您只能更改日志记录级别

相关内容