nginx 直接在配置文件中设置日志分割

只需要在server配置中,配置一个脚本即可,目前这个是定义了日,可以定义到分。
set多添加几个参数即可

        server {
                listen 80 default_server;
                root "/app/www/public";
                if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
                        set $year $1;
                        set $month $2;
                        set $day $3;
                }
                access_log /app/logs/api-access-$year-$month-$day.log main;
                error_log /app/logs/api-error.log;
                # Php files
                location ~ \.php$ {
                        try_files $uri =404;
                        fastcgi_pass unix:/var/run/php-fpm7.sock;
                }
        }

直接在nginx配置文件中,配置日志循环,而不需使用logrotate或配置cron任务。需要使用到timeiso8601内嵌变量来获取时间。time_iso8601 内嵌变量来获取时间。

Nginx日志分割配置方法在不同操作系统下有所不同,以下分别介绍: ### Linux系统 在Linux系统中,可借助logrotate工具来配置Nginx日志分割。首先,在`/etc/logrotate.d`中创建文件`nginx`,该文件作为Nginx日志分割配置文件。示例配置如下: ```plaintext /opt/docker-ws/nginx/logs/*.log { daily # 每天分割一次 size 5M # 源文件小于5M时不分割 rotate 30 # 保留最近30个分割后的日志文件 copytruncate notifempty # 当日志文件为空时不分割 missingok dateext # 切割后的文件添加日期作为后缀 } ``` 此配置指定每天执行一次分割,并且当文件大于5M时才进行分割。同时,`notifempty`参数确保当日志文件为空时不进行分割,`dateext`参数会在切割后的文件添加日期作为后缀,`rotate 30`表示保留最近30个分割后的日志文件 [^1]。 另外,还可以通过crontab定时任务来执行日志切割脚本。例如在打开的文件最末尾添加如下内容,可实现每天凌晨00:01执行Nginx日志切割脚本: ```plaintext 01 00 * * * /home/web/scripts/rotate_nginx_logs.sh > /dev/null 2>&1 ``` ### Windows系统 在Windows系统下实现Nginx自动分割日志,可通过批处理脚本完成。以下是示例脚本: ```batch @shift ::设置nginx安装文件路径和当天时间变量 @echo off set nginx_dir=D:\nginx-1.16.0 set dir=%nginx_dir%\logs\cut_log set log=%nginx_dir%\logs\access.log set errorlog=%nginx_dir%\logs\error.log set today=%date:~0,4%-%date:~5,2%-%date:~8,2% ::判断nginx安装文件路径设置是否正确 :exist_nginx_dir @echo off if exist %nginx_dir% ( cd %nginx_dir% goto check_log ) else ( echo 此路径%nginx_dir%不存在,请检查 goto stop ) ::判断nginx的access.log :check_log @echo off if exist %log% ( goto check_dir ) else ( echo %log%文件不存在,请检查 goto stop ) ::判断nginx的cut_log目录 :check_dir @echo off if exist %dir% ( goto main ) else ( md "%dir%" goto main ) ::创建相关目录和对nginx日志进行切割 :main @echo off ::结束nginx进程 taskkill /F /IM nginx.exe > nul move "%log%" "%dir%\access-%today%.log" > nul move "%errorlog%" "%dir%\error-%today%.log" > nul start nginx.exe ``` 该脚本首先设置Nginx安装路径、日志文件路径和日期变量,然后依次检查Nginx安装路径、日志文件和切割日志的目录是否存在,若不存在则创建相应目录。接着结束Nginx进程,将访问日志和错误日志移动到指定目录并添加日期后缀,最后重新启动Nginx [^2]。 ### 通过Nginx配置文件修改 还可以在Nginx配置文件本身进行日志切割配置,代码如下: ```nginx if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; set $minutes $5; set $seconds $6; } access_log logs/access_$year-$month-$day-$hour-$minutes-$seconds.log main; error_log logs/error_$year-$month-$day-$hour-$minutes-$seconds.log main; ``` 此配置会依据时间戳对日志文件进行命名,从而实现日志分割 [^4]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值