Nginx日志配置及分割

log_format: 格式化日志

log_format 语法
log_format    formatName    formatParams
log_format 语法描述
log_format              声明一个日志格式
formatName              格式化名称, 相当于函数名
formatParams            参数列表, 相当于函数体
log_format 参数列表
$msec                   日志写入时间

$remote_addr            客户端IP
$remote_user            客户端用户名
$http_user_agent        客户端浏览器信息
$http_x_forwarded_for   客户端IP(反向代理)

$time_local             请求时区
$time_iso8601           ISO8601格式时间
$request_time           请求时间

$connection             连接的序列号
$connection_requests    连接的请求数

$request                请求的URL和HTTP协议
$request_body           请求参数
$request_length         请求体长度
$status                 请求的状态码
$http_referer           请求的源地址

$body_bytes_sent        返回体字节数(不包括相应头)
$bytes_sent             返回体总字节数

access_log: 输出日志

access_log 语法
access_log    logPath    [formatName]
access_log 语法描述
access_log             输出格式化的日志到日志文件
logPath                日志文件路径
formatName             格式化名称

切割日志

一.使用脚本切割

编辑脚本
tianshl@tianshl nginx $ vim nginx_log_division.sh
脚本内容
#! /bin/sh

# 昨天日期
yesterday=`date -v -1d +%Y%m%d`

# 日志目录
log_path="/usr/local/var/log/nginx/"

# SDK日志路径
sdk_path=${log_path}sdk

# 以天为单位切分日志
mv -f ${sdk_path}.log ${sdk_path}_${yesterday}.log

# 重新生成日志文件
pid_path="/usr/local/var/run/nginx.pid"
sudo kill -USR1 `cat ${pid_path}`
定时任务
切换到root身份
tianshl@tianshl nginx $ sudo su root
编辑 crontab
sh-3.2# crontab -e
crontab 添加一行
0 0 * * * sh /usr/local/var/log/nginx/nginx_log_division.sh
查看是否添加成功
sh-3.2# crontab -l

二.不使用脚本切割

server 段增加以下代码
if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
    set $time $1$2$3;
}
日志文件路径中增加日期参数
access_log /var/log/nginx/api-$time.log;
举个栗子
events {
    worker_connections 1024;
}

http {
    server {
        # 监听88端口
        listen 88;

        if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
            set $time $1$2$3;
        }

        location /sdk {
            # 输出sdk访问日志
            access_log /usr/local/var/log/nginx/sdk-$time.log;
            proxy_pass http://localhost:8888;
        }
    }
}
栗子描述
1. 访问/sdk时会生成当天时间的日志文件,当文件存在时则追加内容,文件不存在时自动创建。
2. 同理可以按年、月、日、小时、分钟、秒等进行切割。

举个栗子

编辑配置文件, 例如 nginx.conf
tianshl@tianshl ~ $ vim /usr/local/etc/nginx/nginx.conf
配置内容
events {
    worker_connections 1024;
}

http {

    # 声明sdk日志格式
    log_format sdk_log '$remote_addr - $status';

    # 声明api日志格式
    log_format api_log $request_body;

    server {
        # 监听88端口
        listen 88;

        location /sdk {
            # 输出sdk日志
            access_log /usr/local/var/log/nginx/sdk.log sdk_log;
            proxy_pass http://localhost:8888;
        }

        location /api {
            # 输出api日志
            access_log /usr/local/var/log/nginx/api.log api_log;
            proxy_pass http://localhost:8888;
        }
    }
}
重启 nginx
tianshl@tianshl ~ $ sudo nginx
nginx 启动成功后自动生成四个日志文件
tianshl@tianshl ~ $ cd /usr/local/var/log/nginx
tianshl@tianshl nginx $ ls
access.log    api.log    error.log    sdk.log
查看日志
tianshl@tianshl nginx $ tail -f *.log

==> access.log <==

==> api.log <==

==> error.log <==

==> sdk.log <==
发起sdk请求并查看日志
==> sdk.log <==
127.0.0.1 - 502
测试结果
测试通过

你可能感兴趣的:(mac,服务器,nginx,nginx,log,日志,format,切割)