Nginx 日志文件 access_log详解及日志分割

Module ngx_http_log_module

nginx 日志相关指令主要有两条,

一条是log_format,用来设置日志格式,
另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小。
通俗的理解就是先用log_format来定义自己想用的日志格式,然后在用access_log定义日志时再把定义的log_format名称 跟在后面;

1、log_format 格式

log_format name(格式名字) string(格式样式即想要得到什么样的日志内容)

示例:

log_format access ‘$remote_addr - $remote_user [$time_local] "$request" "$request_time" $status $body_bytes_sent "$http_referer" "$http_user_agent" $http_x_forwarded_for‘;

注释:
$remote_addr:与 $http_x_forwarded_for 用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local:用来记录访问时间与时区;
$request:用来记录请求的http的方式与url;
$request_time:用来记录请求时间;
$status:用来记录请求状态;成功是200,
$body_bytes_sent:记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户毒啊浏览器的相关信息。

通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。

反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用来记录客户端IP地址和客户端请求的服务器地址

2、用access_log指令日志文件存放路径;
用了log_format 指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;
access_log path(存放路径) access(自定义日志名称,和log_format设置的名称一致)

示例:
access_log logs/access.log access;

注意:
在定义日志目录中要注意的是,nginx进程设置的用户和组必须有对该路径创建文件的权限,
假设nginx的usr指令设置的用户名 和用户组都是www,而logs 目录的用户名和组是root,那么日志文件将无法被创建。

用nginx做前端代理后,我们发现 HTTP_X_FORWARDED_FOR 无法获取到客户端真实的IP地址了。

原因 nginx 默认并不会增加 X_FORWARDED_FOR 头信息,我们给他加上就好了。简单配置如下:

location /
{
    proxy_pass          http://www.xxx.com;
    proxy_set_header    Host             $host;
    proxy_set_header    X-Real-IP        $remote_addr;
    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;    //别忘了这一句
    proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;              //或是加上这一句
    proxy_redirect      default;
}

重启nginx加载新配置后,就可以获取客户端真实的IP地址了

3.日志切割:
通过如下方式达到日志切割:

vim /opt/cut_nginx.sh
#!/bin/bash
#切割日志datetime=$(date -d "-1 day" "+%Y%m%d")
log_path="/usr/local/nginx/logs"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $log_path/backup ] || mkdir -p $log_path/backup
if [ -f $pid_path ]
then
mv $log_path/access.log $log_path/backup/access.log-$datetime
kill -USR1 $(cat $pid_path)
find $log_path/backup -mtime +30 | xargs rm -f  \\mtime :文件被修改时间 atime:访问时间(文件中的数据库最后被访问的时间) ctime:改变时间(文件的元数据发生变化。比如权限,所有者等)
else
echo "Error,Nginx is not working!" | tee -a /var/log/messages
fi

chmod +x /opt/cut_nginx.sh

crontab -e 设置定时任务

0  0  *  *  *     /opt/cut_nginx.sh

[[email protected] ~]# /opt/cut_nginx_log.sh

[[email protected] ~]# ls /usr/local/nginx/logs/backup/

access.log-20161117

[[email protected] ~]# killall -9 nginx

[[email protected] ~]# /opt/cut_nginx_log.sh

Error,Nginx is not working!

[[email protected] ~]# tail -1 /var/log/messages

Error,Nginx is not working!

原文地址:https://www.cnblogs.com/canflyfish/p/11568588.html

时间: 2024-10-08 08:41:49

Nginx 日志文件 access_log详解及日志分割的相关文章

mysql-删除日志文件命令详解

装载 在mysql中会生大量的如mysq-bin.000001这类日志文件了,这些都是二进制文件了,如果我们是普通的日志没有进行主从配置就可以直接使用reset master进行删除了这个方法很简单, 如果没有主从复制,可以通过reset master的方式,重置数据库日志,清除之前的日志文件: mysql> reset master; 还有一各就是在my.cnf里配置. expire_logs_days = 3 二进制日志自动删除的天数.这里设置了自动清除3天前的logs. 默认值为0,表示“

/var/log目录下的20个Linux日志文件功能详解

如果愿意在Linux环境方面花费些时间,首先就应该知道日志文件的所在位置以及它们包含的内容.在系统运行正常的情况下学习了解这些不同的日志文件有助于你在遇到紧急情况时从容找出问题并加以解决. 以下介绍的是20个位于/var/log/ 目录之下的日志文件.其中一些只有特定版本采用,如dpkg.log只能在基于Debian的系统中看到. /var/log/messages - 包括整体系统信息,其中也包含系统启动期间的日志.此外,mail,cron,daemon,kern和auth等内容也记录在var

/var/log目录下的Linux日志文件功能详解_转

摘自:http://www.niaoyun.com/help/application/386.html 学习linux应该知道日志文件的所在位置以及它们包含的内容,在系统运行正常的情况下学习了解这些不同的日志文件有助于你在遇到紧急情况时从容找出问题并加以解决. 以下介绍的是位于/var/log/ 目录之下的日志文件.其中一些只有特定版本才用,如dpkg.log只在基于Debian的系统中有. /var/log/messages          — 包括整体系统信息,其中也包含系统启动期间的日志

Log4j写日志文件使用详解

Log4j输出到控制台成功,写入文件失败 - Log4j和commons log的整合 一.今天在使用commongs-logging.jar和log4j.properties来输出系统日志的时候,发现日志能够成功的输出到控制台,但是去不能写到目的文件中,具体的步骤和原因如下: 1. 只在项目中引入commons-logging.jar commons-logging.jar 使用 Log logger = LogFactory.getLogger(XXX.class), 如果有log4j.pr

nginx使用手册--nginx.conf文件配置详解

#运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; #工作模式及连接数上限 events { #epoll是多路复用IO(I/O Multiplexing)中的一种方式, #仅

九爷带你了解 nginx 日志配置指令详解

nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_found.log_subrequest.rewrite_log.error_log. nginx有一个非常灵活的日志记录模式.每个级别的配置可以有各自独立的访问日志.日志格式通过log_format命令来定义.ngx_http_log_module是用来定义请求日志格式的. 1. access_l

Linux01-Linux日志系统syslog详解55

一.日志系统 1.日志系统:syslog() 信息详细程序:日志级别 日志子系统:facility 日志记录动作:Action Linux上的日志系统: syslog syslog-ng: syslog-ng作为syslog的替代工具,可以完全替代syslog的服务,并且通过定义规则,实现更好的过滤功能 系统启动过程的日志: kernel --> 物理终端(/dev/console) --> /var/log/dmesg 查看日志命令: dmesg /var/log/dmesg cat /va

Java学习-007-Log4J 日志记录配置文件详解及实例源代码

此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-30 13:54:02,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKE56sxqtQCfP  访问密码 63d8 有关 Log4J 日志文件中日志级别及文件配置的详细情况,在 Log4J 的配置文件(xml.properties)中有详细的介绍,敬请参阅!

java log4j基本配置及日志级别配置详解

java log4j日志级别配置详解 1.1 前言 说出来真是丢脸,最近被公司派到客户公司面试外包开发岗位,本来准备了什么redis.rabbitMQ.SSM框架的相关面试题以及自己做过的一些项目回顾,信心满满地去面试,结果别人一上来就问到了最近项目使用的日志系统是什么?日志级别是怎么配置的?当时我都蒙X了,平时都是项目经理搭的,我自己也是随便上网一搜往配置文件一黏贴就OK了.我就这么说完后面试官深深定了我一眼,当时我的内心羞愧到...... 1.2 闲话少说,讲讲日志的发展故事(如果已经了解的