Nginx 日志

Nginx 日志分为两种,一种是错误日志(error log),记录 Nginx 运行过程中遇到的异常,一种是访问日志(access log),记录的是 WEB 服务被用户访问时留下的一些信息。例如哪些文件被访问过、Nginx 如何响应、用户使用的 IP 地址等等。

1 开启访问日志

要开启访问日志,在 nginx.conf 文件中的 http 或 server 字段添加以下参数:
access_log log_file log_format;
其中 log_file 为日志要保存的路径,log_format 为日志记录格式。记录格式可以采用默认,也可以在 http 字段中自定义:
log_format format_name 'set_of_variables_to_define_format';
其中 format_name 表示这个日志格式的名称,在引用时需要用到。set_of_variables_to_define_format 表示此日志格式所记录的信息及顺序。
访问日志格式详解可见此官方文档。

小提示:
• server 字段如果未设置访问日志,则该 server 访问日志会继承 http 字段中的设置。
• server 字段中的 location 字段也可单独设置访问日志。
• 每个字段中都可以设置多个不同格式的日志。

2 开启错误日志

要开启错误日志,在 nginx.conf 文件中 http 字段添加以下参数:
error_log log_file log_level;
其中 log_file 为日志要保存的路径,log_level 为要记录的日志级别,设置某个级别后,该级别及以上级别的错误日志都将被记录。
错误日志共分为 8 个级别,从高到低分别是:
• emerg: 紧急,可能导致服务不可用。
• alert: 告警,严重问题告警。
• crit: 严重,需要关注的严重问题。
• error: 错误,发生错误,例如某个页面处理错误。
• warn: 警示,可能需要关注的问题。
• notice: 通知,简单的通知日志,大多数情况下可以忽略。
• info: 信息,运行中的普通信息。
• debug: 调试,用于分析错误的调试信息。

3 日志按天或按月存放

通常配置情况下,Nginx 所有访问日志存放在同一个 log 文件中,时间一长,日志文件将变得巨大,导致备份、分析都不方便。因此需要将日志按一定时间间隔分开存放,例如每天、每月或其它时间间隔。要实现这个目的主要由两种方式:
• 一种是在 nginx.conf 配置文件中进行配置
• 一种是使用系统定时任务脚本定期对日志进行分割

3.1 在 nginx.conf 中配置日志存放规则

在这里,我们需要用到 map 指令,map 指令是由 ngx_http_map_module 模块提供的,默认情况下安装 nginx 都会安装该模块。map 指令只能位于 nginx.conf 的 http 字段内。具体代码如下:

http {
......
......#设置日志按日期或月份滚动
map $time_iso8601 $year {
default 'date';
'~^(?<yyyy>\d{4})-' $yyyy;
}map $time_iso8601 $month {
default 'not';
'~^\d{4}-(?<mm>\d{2})-' $mm;
}map $time_iso8601 $day {
default 'found';
'~^\d{4}-\d{2}-(?<dd>\d{2})' $dd;
}#日志按年-月-日名称格式存放
#map $time_iso8601 $logfile_date {
# default 'date-not-found';
# '~^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})' $year-$month-$day;
#}#日志按年-月名称格式存放
map $time_iso8601 $logfile_month {
default 'date-not-found';
'~^(?<year>\d{4})-(?<month>\d{2})' $year-$month;
}
}

使用 map 定义好变量之后,即可在配置访问日志记录时使用该变量:
access_log logs/$logfile_month.access.log;
access_log 指令可以在 http 字段内,也可以在 server 字段内。
配置好后,如果遇到日志文件并没有生成的问题,则可能是 logs 目录权限导致,需要赋予 logs 目录 nginx 启动用户的权限(这是在日志路径中使用变量的一些限制,参考官方:Nginx 日志模块说明)。假设 nginx 以 www 组的 www 用户启动,则:
chown -R www:www logs/
最终生成的日志效果如下:

关于在日志路径中使用变量的限制,包括:

日志文件路径可以包含变量 (0.7.6+),但这类设置存在以下限制:
• 启动 Nginx worker 进程的用户必须拥有日志目录的写权限;
• 写缓存将不起作用;
• 每条日志写入都会造成日志文件的打开和关闭。然而,由于频繁读写的文件的文件描述符可能会被存储与缓存中,根据 open_log_file_cache 指令的时间参数设置,日志可能继续写入到旧文件中;
• 每条日志写入时都会检测站点根目录是否存在,如果不存在则日志不会创建,因此最好在 access_log 设置的同级别指令段中指定站点根目录,例如:

server {
root /spool/vhost/data/$host;
access_log /spool/vhost/logs/$host;
...

也有使用 if 判断语句来定义上面的变量,但据说可能引发问题,建议使用 map 指令。说法来源:
StackOverFlow https://stackoverflow.com/questions/53196478/include-date-in-nginx-log-file-name
Nginx 官网 https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

3.2 通过定时脚本分割日志

创建日志分割脚本 splitLog.sh :
# /bin/bash

# 日志保存位置
base_path='/usr/local/nginx/logs/'

# 获取当前年信息和月信息
log_path=$(date -d yesterday +"%Y%m")

# 获取昨天的日信息
day=$(date -d yesterday +"%d")

# 按年月创建文件夹
mkdir -p $base_path/$log_path

# 备份昨天的日志到当月的文件夹
mv $base_path/access.log $base_path/$log_path/access_$day.log

# 输出备份日志文件名
# echo $base_path/$log_path/access_$day.log

# 通过Nginx信号量控制重读日志
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

添加Linux定时任务:
crontab -e
# 每天0时1分进行日志分割(建议在02-04点之间,系统负载小)
01 00 * * * /usr/local/nginx/logs/splitLog.sh

重启Linux定时任务:
crond restart

如果提示以下错误 crond: can't lock /var/run/crond.pid, otherpid may be 4141:资源暂时不可用,删除 /var/run/crond.pid 重新执行命令即可。

作者:李凌

本文转自【中国信创服务社区】

Nginx日志配置经验分享相关推荐

  1. 渗透测试技术分享——nginx日志配置

    Nginx 日志配置 0x00 前言 日志使用用来进行数据统计.问题排错的重要手段.本文主要介绍 nginx 日志相关的配置如 access_log.log_format.log_not_found. ...

  2. 九爷带你了解 nginx 日志配置指令详解

    nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...

  3. Nginx 日志配置实践

    前言 Nginx日志对于统计.系统服务排错很有用. Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志).通过访问日志我们可以得到用户的IP地址.浏览器的信息, ...

  4. Nginx日志配置、错误界面配置、流量控制 第九天

    目录 nginx日志配置 nginx日志介绍 access.log error.log open_log_file_cache rewrite.log nginx的日志轮转 nginx错误界面配置 n ...

  5. Nginx 日志配置

    1.Nginx 日志介绍 Nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的支持,日志格式通过 log_for ...

  6. Nginx 日志配置、日志切割

    Nginx 日志配置.日志切割 设置 access.log 语法 log_format自定义格式 设置error_log 语法 日志切割 前置文章:Nginx 的配置文件 nginx.conf Ngi ...

  7. 【Nginx 日志配置】【访问日志log_format】【错误日志error_log 指令】【Nginx的日志轮转】

    文章目录 Nginx 日志配置 `log_format` 指令中常用的一些变量: 访问日志 案例 可以配置段:`http`, `stream`, `server`, `location`作用域. er ...

  8. 运维配置:Nginx日志配置详解

    Nginx日志配置详解 前言 Nginx日志对于统计.系统服务排错很有用.Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志).通过访问日志我们可以得到用户的I ...

  9. nginx 日志配置_Nginx记录日志到systemd journal

    简介 今天要给大家分享的事如何配置nginx记录access log和error log到systemd journal日志中去 需求 在前面的文章我们讲道,我们可以不需要容器化,直接部署nginx到 ...

最新文章

  1. 【百战GAN】新手如何开始你的第一个生成对抗网络(GAN)任务
  2. verilog always语法_Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
  3. How-to-quick-getting-started-for-Frontend
  4. (18)FPGA面试技能提升篇(CACHE、MMU、DMA)
  5. 仿ios桌面vivo_流畅就是跑分高?vivo选择说不,用这款杀器终结国产手机内卷
  6. 程序员在家办公没显示屏,我被领导鄙视了
  7. 几个清华和北邮学霸公众号,值得学习
  8. CentOS 5.11下Oracle 11G R2 Dataguard搭建
  9. dex2jar源码解析之总体介绍(一)
  10. MAXScript语法及命令
  11. TF-IDF算法原理和公式
  12. 论文主题、引用量、中国机构 华人学者,KDD 2020 关键数据抢先看
  13. Windows 技术篇-修改hosts添加域名解析实例演示,设置域名指定ip方法
  14. L1-022 奇偶分家(c)
  15. 关于一个大学生如何利用编程赚钱
  16. Windows 和 android 平台Boost编译方法
  17. 【报告分享】2021直播电商年度数据报告-抖音快手-果集数据(附下载)
  18. 2095: [Poi2010]Bridges 二分+混合图欧拉回路(网络流)
  19. 优思学院:从零基础成为六西格玛黑带?
  20. Springboot 一文搞懂AOP面向切面编程

热门文章

  1. python绘制立体心形折纸图解_立体幸运心、桃心简单折纸方法图解
  2. JS获取cookie值
  3. GUI之计算器简单版
  4. 第三十届ACM国际大学生程序设计竞赛全程采访 - 赴美首日
  5. Java爬虫爬取王者荣耀皮肤
  6. 微信小程序授权获取用户信息和手机号码
  7. java mysql索引_如何理解并正确使用MySql索引
  8. [Qt 教程之Widgets模块] —— QCheckBox复选框
  9. centos重启网络服务失败
  10. mysql官网怎么下载服务器_mysql官网下载对应的mysql包