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


    直接在nginx配置文件中,配置日志循环,而不需使用logrotate或配置cron任务。需要使用到$time_iso8601 内嵌变量来获取时间。$time_iso8601格式如下:2015-08-07T18:12:02+02:00。然后使用正则表达式来获取所需时间的数 据。

    按天分割日志

    使用下面的代码块

    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
        set $year $1;
        set $month $2;
        set $day $3;
    }
    
    access_log /data/logs/nginx/upchina.com-$year-$month-$day-access.log;
    

     也可以使用Perl语法来捕获,如下:

    if ($time_iso8601 ~ "^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})") {}
    
    access_log /data/logs/nginx/upchina.com-$year-$month-$day-access.log;
    

     按时、分、秒分割

    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;
    }
    

     非常方便的进行日志分割。建议按小时分割日志,方便分析查询日志。

    
    

    使用logrotate+crontab进行日志切割

    nginx日志默认情况下统统写入到一个文件中,文件会变的越来越大,非常不方便查看分析。以日期来作为日志的切割是比较好的,通常我们是以每日来做统计的。下面来说说nginx日志切割。

    1. 定义日志轮滚策略

    # vim nginx-log-rotate

    复制代码
    /data/weblogs/*.log {
        nocompress
        daily
        copytruncate
        create
        notifempty
        rotate 7
        olddir /data/weblogs/old_log
        missingok
        dateext
        postrotate
            /bin/kill -HUP `cat /var/run/nginx.pid 2> /dev/null` 2> /dev/null || true
        endscript
    }
    复制代码

    [warning]/data/weblogs/*.log使用通配符时,/data/weblogs/目录下的所有匹配到的日志文件都将切割。如果要切割特定日志文件,就指定到该文件。[/warning]

    2. 设置计划任务

    59 23 * * * root ( /usr/sbin/logrotate -f /PATH/TO/nginx-log-rotate)

    这样每天23点59分钟执行日志切割。

  • 相关阅读:
    <转>MSDN上关于XPath的语法文章
    <转>正则表达式语法
    <转>反射技术的简单介绍
    <转>css中用expression实现js的onmouseover/onmouseout事件
    <转>在xslt中实现split方法对查询字符串进行分隔
    <转>SQL Server中的XML数据进行insert、update、delete
    <转>VS2010项目转换到VS2008下方法
    <转>在xslt 1.0 中取得当前时间
    C# 发送邮件的Helper类
    DataTable 类的学习笔记
  • 原文地址:https://www.cnblogs.com/dongming/p/4744264.html
Copyright © 2020-2023  润新知