12、nginx日志配置

1.nginx日志指令

  • log_format: 用于设置日志格式
  • access_log: 用于指定日志文件存放路径、格式、缓存大小

可设置在http、server块中

2.log_format

2.1 log_format语法

log_format name format [format ...]

name表示定义的格式名称
format 表示定义的格式样式。

  • log_format 有一个默认的、无须设置的combined日志格式设置,相当于Apache的combined 日志格式,其具体参数如下:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http user_agent"';

2.2 access_log语法

access_log path [format [buffer=size | off]]

path 表示日志文件的存放路径
format 表示使用 log_format 指设置的日志格式的名称
buffer=size表示设置内存缓冲区的大小,例如可以设置 buffer=32k。

  • 如果不想记录日志,可以使用以下指令关闭日志记录:
access_log off;
  • 如果想使用默认的 combined 格式的日志记录,可以使用以下示例:
access_log /data1/logs/filename.1og;
access_log /data1/logs/filename.log combined;
  • 如果想使用自定义格式的日志记录,可以使用以下示例,其中的 mylogformat 是日志格式名称:
log_format mylogformat '$remote_addr - $remote_user [$time_local]  "$request" '
                        '$status $body_bytes_sent" $http_referer"'
                        '"$http_user_agent" $http_x_forwarded_for';
access_log /datal/logs/access.log mylogformat buffer=32k;
  • Nginx 0.7.4之后的版本中,access_log 指令中的日志文件路径可以包含变量,例如:
access_log /data1/logs/$server_name.log combined;

假设 server_name 指令设置的虚拟主机名称为 test.domain.com,那么access_log 指令将把访问日志记录在/datal/logs/test.domain.com.log 文件中

如果日志文件路径中含有变量,将存在以下一些限制:

  1. Nginx 进程设置的用户和组必须有对该路径创建文件的权限。假设 Nginx 的 user 指令设置的用户名和用户组都是 www,而/datal/logs/目录的用户名和用户组为 root,日志文件/datal/logs/test.domain.com.log 将无法被 Nginx 创建;

  2. 缓冲将不会被使用;

  3. 对于每一条日志记录,日志文件都将先打开文件,再写入日志记录,然后马上关闭。为了提高包含变量的日志文件存放路径的性能,须要使用 open_log _file_cache 指令设置经常被使用的日志文件描述符缓存

open_log_file_cache 指令主要用来设置含有变量的日志路径的文件描述符缓存,它的语法如下:

open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] | off 
# 该指令默认是禁止的,等同于:
open_logfile_cache off;

open_log_file_cache 指令的各项参数说明如下:

  • max: 设置缓存中的最大文件描述符数量。如果超过设置的最大文件描述符数量则采用LRU(Least Recently Used)算法清除“较不常使用的文件描述符”。LRU (Least Recently Used)算法的基本概念是:当内存缓冲区剩余的可用空间不够时,缓冲区尽可能地先保留使用者最常使用的数据,将最近未使用的数据移出内存,腾出空间来加载另外的数据。
  • inactive: 设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符此参数为可选参数,默认的时间为 10 秒钟。
  • min_uses:在参数 inactive 指定的时间范围内,如果日志文件超过被使用的次数,则将该日志文件的描述符记入缓存。默认次数为 1。
  • valid:设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否仍然存在。默认时间为60秒
  • off:禁止使用缓存
  • open_log_file_cache 指令的设置示例如下 open_log_file_cache max=1000 inactive=20s minuses=2 valid=1m;

3.nginx日志切割

便携 cron脚本

#!/bin/bash
#这个脚本须在每天的00:00运行

#Nginx日志文件的存放路径
logspath="/data1/logs/

mkdir -p $(logs_path)$(date -d "yesterday" + "%Y")/$(date -d "yesterday" + "%m")/ 
mv $(logs_path)access.log $(logs_path)$(date -d "yesterday" + "%Y")/$(date -d "yesterday" + "%m")/access_$(date -d "yesterday" + "%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`

另外,配置crontab每天凌晨00:00定时执行这个脚本 crontab -e

00 00 * * * /bin/bash /usr/local/webserver/nginx/sbin/cutnginxlog.sh

posted on   ccblblog  阅读(42)  评论(0编辑  收藏  举报

(评论功能已被禁用)
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示