阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx日志文件格式及切割日志文件

116次阅读
没有评论

共计 3364 个字符,预计需要花费 9 分钟才能阅读完成。

作为 Web 服务器而言,日志是必不可少的也是需要经常查看的。此篇就来介绍下如何自定义 Nginx 中的日志格式以及使用 crontab 计划任务来做到每天切割一次日志文件从而做到方便管理。

在 Nginx 中日志文件是由 log_format 这个指令来定义的,它的语法如下:

log_format    name    format
##    name:指的是日志格式的名称(后面调用)
##    format:设置日志具体格式的

在 Nginx 中有自己默认的日志格式,如下内容:

#log_format  main  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
#                  ‘$status $body_bytes_sent “$http_referer” ‘
#                  ‘”$http_user_agent” “$http_x_forwarded_for”‘;

默认给注释掉了,看一下解释吧。

$remote_addr

客户端的 ip 地址(如果中间有代理服务器那么这里显示的 ip 就为代理服务器的 ip 地址

$remote_user 用于记录远程客户端的用户名称(一般为“-”)
$time_local

用于记录访问时间和时区

$request 用于记录请求的 url 以及请求方法
$status 响应状态码
$body_bytes_sent 给客户端发送的文件主体内容大小
$http_user_agent 用户所使用的代理(一般为浏览器)
$http_x_forwarded_for 可以记录客户端 IP,通过代理服务器来记录客户端的 ip 地址
$http_referer 可以记录用户是从哪个链接访问过来的

有时候可能就算启用了 $http_x_forwarded_for 也无法获取客户端的 ip 地址详情请参考此篇博文:Nginx 日志获取不到远程访问 ip 问题解决  http://www.linuxidc.com/Linux/2014-12/110990.htm

通过参考上述内容可以快速的定制出来一个日志格式了,就在上一次做的虚拟主机里增加吧。

Nginx 日志文件格式及切割日志文件

上次并没有自定义日志格式并且在限制访问的状态页面也没有启用访问日志,那就写一个吧。

        log_format access ‘$remote_addr $remote_user “$time_local” $request’

                        ‘$status $http_referer’

                        ‘”$http_user_agent” $http_x_forwarded_for’;

添加的名称为 access 日志记录了 ip、用户、时间、相应方法及页面、状态码、从哪个链接过来的、用户代理、如果中间有代理也从代理获取用户 ip,然后将状态页面的访问日志打开并且给一个文件路径(此文件可以不存在,目录必须存在)然后在路径后面指定好我们刚才设置的名称,也将正常页面的访问日志引用自定义的日志格式。(原来是没有设置名称的,那么就为默认格式)

Nginx 日志文件格式及切割日志文件

定义完成后看下是否配置正确

nginx -t

Nginx 日志文件格式及切割日志文件

nginx 给了一个警告信息, 警告我们 log_format 可能使用在 /usr/local/nginx/nginx.conf 中的 http 等级下,如果要修复这个警告按照以下方法即可解决。

将我们的自定义信息放入到 nginx.conf 配置文件中的 http 里面(一定要在虚拟主机的配置文件中删除自定义的 log_format):

Nginx 日志文件格式及切割日志文件

再次检查即可正常使用

Nginx 日志文件格式及切割日志文件

将原来的 access.log 文件删除或者重命名,然后重读配置文件

cd /web/vhost/test1/logs/
mv test1.access.log access.log.bak
nginx -s reload    #重读配置文件

然后访问下看看日志文件是否和我们自定义的内容一样:

Nginx 日志文件格式及切割日志文件

状态页面的访问日志里记录了 ip、用户名、时间、请求方法、、访问的页面、页面状态码(由于定义的时候没有加“-”导致了效果不太好)、客户端使用的浏览器、以及代理服务器(本机访问的没有代理服务器所以就为 -)

自定义日志就结束了,接下来就是切割日志文件并且每天保存一份当天的日志文件方法如下:

首先将原来的日志文件重命名

mv test1.access.log test1.2014-12-29.log

nginx  -s reload

这样就可以做到日志文件的切割。如果要每天自动保存的话就要基于 crontab 来管理了。写个脚本吧

#!/bin/bash
#
#
vhost=test1  ## 定义虚拟主机的目录名
log_path=/web/vhost/logs        #指定日志文件要保存位置
access_log_path=/web/vhost/${vhost}/logs    #指定 access 日志所在路径
mkdir -p ${log_path}/$(date -d “yesterday” +”%y”)/$(date -d “yesterday” +%m)/        ## 创建日期目录,date -d “yesterday” +”%y” 获取年份后面那个是获取月份
mv ${access_log_path}/${vhost}.access.log ${log_path}/$(date -d “yesterday” +”%y”)/$(date -d “yesterday” +%m)/$(date -d “yesterday” +%d).${vhost}.access.log  ## 这里将访问日志文件移动到备份的目录中如:/web/vhost/logs/14/12/28.test1.access.log
nginx -s reload        ## 这里我的 nginx 在编译的时候使用 –sbin-path=/usr/sbin/nginx 这个参数了所以我可以直接使用 nginx 如果没有使用此参数请一定要将你的 nginx 安装目录下的 sbin 目录添加至系统环境变量中。

然后将这个脚本文件放到 nginx 的配置目录下添加定时计划

mkdir /usr/local/nginx/bin && mv logs.sh /usr/local/nginx/bin/logs.sh
crontab -e
00 00 * * * /bin/bash /usr/local/nginx/bin/logs.sh

这样在每天的夜晚 12 点就会自动创建备份文件了,如果要对错误日志也每天备份的话按照上面的内容修改即可。

————————————– 分割线 ————————————–

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

————————————– 分割线 ————————————–

Nginx 的详细介绍 :请点这里
Nginx 的下载地址 :请点这里

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计3364字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中