Nginx--日志

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

一、Nginx日志介绍

nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的支持,日志格式通过 log_format 命令来定义,日志对于统计和排错是非常有利的,下面总结了 nginx 日志相关的配置 包括 access_log 、 log_format 、open_log_file_cache 、 rewrite_log 、 error_log

二、Nginx日志配置

1、格式

 # 设置访问日志access_log path [format [buffer=size] [gzip[=level]] [flush=time][if=condition]];# 关闭访问日志access_log off;
参数作用
path指定日志的存放位置
format指定日志的格式。默认使用预定义的 combined
buffer用来指定日志写入时的缓存大小。默认是64k
gzip日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1
flush设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空
if 条件判断如果指定的条件计算为0或空字符串,那么该请求不会写入日志

2、作用域

可以应用 access_log 指令的作用域分别有http , server , location , limit_except 。也就是说,在这几个作用域外使用该指令,Nginx会报错

示例:

 # 指定日志的写入路径为 /var/logs/nginx-access.log ,日志格式使用默认的 combinedaccess_log /var/logs/nginx-access.log​# 指定日志的写入路径为 /var/logs/nginx-access.log ,日志格式使用默认的 combined ,指定日志的缓存大小为 32k,日志写入前启用 gzip 进行压缩,压缩比使用默认值 1,缓存数据有效时间为1分钟access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m

3、log_format 指令

Nginx预定了名为combined日志格式,如果没有明确指定日志格式默认使用该格式:

log_format combined '$remote_addr - $remote_user [$time_local] '   '"$request" $status $body_bytes_sent '   '"$http_referer" "$http_user_agent"';

如果不想使用Nginx预定义格式,可以通过log_format指令来自定义;其语法:

 log_format name [escape=default|json] string ...;

参数说明
name格式名称。在access_log指令中使用
escape设置变量中的字符编码方式是json还是default,默认为default
string要定义的日志格式内容。该参数可以有多个。参数中可以使用Nginx变量

3.1、自定义日志格式的使用

 access_log /var/logs/nginx-access.log mainlog_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

使用 log_format 指令定义了一个 main 的格式,并在 access_log 指令中引用了它。假如客户端有发起请求: https://testpm.com/ ,我们看一下我截取的一个请求的日志记录:

 10.0.105.207 - - [01/Jul/2019:10:44:36 +0800] "GET / HTTP/1.1" 304 0 "-""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/75.0.3770.100 Safari/537.36" "-"

我们看到最终的日志记录中 $remote_user 、 $http_referer 、 $http_x_forwarded_for 都对应了一个 - ,这是因为这几个变量为空;注意日志里面的ip地址一定要在第一列

4、error_log 指令

错误日志在Nginx中是通过 error_log 指令实现的。该指令记录服务器和请求处理过程中的错误信息,其语法:

 error_log file [level];     # 指定日志的写入位置与日志的级别;level可以是 debug、info、 notice、warn、error、crit、alert , emerg中的任意值​# 默认:Default:    error_log logs/error.log error;

配置段: main , http , mail , stream , server , location 作用域

5、open_log_file_cache 指令

每一条日志记录的写入都是先打开文件再写入记录,然后关闭日志文件;如果你的日志文件路径中使用了变量,如access_log /var/logs/$host/nginx-access.log,为提高性能,可以使用open_log_file_cache指令设置日志文件描述符的缓存,其语法:

 open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];​# 默认:open_log_file_cache off;
参数说明
max设置缓存中最多容纳的文件描述符数量,如果被占满,采用LRU算法将描述符关闭
inactive设置缓存存活时间,默认是10s
min_usesinactive时间段内,日志文件最少使用几次,该日志文件描述符记入缓存,默认是1次
vaild设置多久对日志文件名进行检查,看是否发生变化,默认是60s
off不使用缓存。默认为off

配置段:http 、 server 、 location 作用域中。

示例:设置缓存最多缓存1000个日志文件描述符,20s内如果缓存中的日志文件描述符至少被被访问2次,才不会被缓存关闭。每隔1分钟检查缓存中的文件描述符的文件名是否还存在

 open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

6、rewrite_log指令

ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启,启用时将在 error_log 中记录 notice 级别的重写日志。其基本语法:

 rewrite_log on | off;默认值:rewrite_log off;

配置段:http , server , location , if 作用域

三、Nginx日志配置总结

Nginx中通过accesslog 和 errorlog 指令配置访问日志和错误日志,通过 log_format 我们可以自定义日志格式。如果日志文件路径中使用了变量,我们可以通过 open_log_file_cache 指令 来设置缓存,提升性能。其他的根据自己的使用场景定义。详细的日志配置信息可以参考 Alphabetical index of variables (nginx.org)

四、Nginx的日志轮转

日志轮转(Log rotation)是一种在服务器或应用程序中管理日志文件的常用策略,目的是控制日志文件的大小和数量,防止它们无限制增长,从而占用过多的磁盘空间,并确保日志文件的可管理性和可访问性

 [root@192 ~]# rpm -ql nginx |grep log/etc/logrotate.d/nginx/var/log/nginx[root@192 ~]# vim /etc/logrotate.d/nginx/var/log/nginx/*.log {      #指定需要轮转处理的日志文件daily                     #日志文件轮转周期,可用值为: daily/weekly/yearlymissingok                 # 忽略错误信息rotate 7                  # 轮转次数,即最多存储7个归档日志,会删除最久的归档日志minsize 5M                #限制条件,大于5M的日志文件才进行分割,否则不操作dateext                   # 以当前日期作为命名格式compress                  # 轮循结束后,已归档日志使用gzip进行压缩delaycompress             # 与compress共用,最近的一次归档不要压缩notifempty                # 日志文件为空,轮循不会继续执行create 640 nginx nginx    #新日志文件的权限sharedscripts             #有多个日志需要轮询时,只执行一次脚本postrotate            # 将日志文件转储后执行的命令。以endscript结尾,命令需要单独成行if [ -f /var/run/nginx.pid ]; then #判断nginx的PID。#默认logrotate会以root身份运行kill -USR1 cat /var/run/nginx.pidfiendscript}# 执行命令:[root@192 nginx]# /usr/sbin/logrotate -f /etc/logrotate.conf# 创建计划任务:[root@192 nginx]# crontab -e59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.conf

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403934.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机视角下的EasyCVR视频汇聚管理:构建全方位、智能化的AI视频监控网络

随着5G、AI、物联网(IoT)等技术的快速发展,万物互联的时代已经到来,视频技术作为信息传输和交互的重要手段,在多个领域展现出了巨大的应用潜力和价值。其中,EasyCVR视频汇聚平台与无人机结合的AI应用更是为…

javaweb_10:XML映射文件

一、规范 1、XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放在相同的包下(同包同名)。 2、XML映射文件的namesapce属性为Mapper接口全限定名一致。 3、 XML映射文件中sql语句的id与Mapper接口中的方法名一致&a…

低代码平台工具 —— 公式编辑器

导读 公式编辑器:公式编辑用于字段值来源于其他字段或是来源于函数计算结果都可由公式编辑来完成 公式编辑器主要需要解决三件事: 合适的编辑器强大的函数库合适的事件监听 技术选型 excel函数库 formulajs,这个函数库可以让JavaScript支…

C++:string类篇

string类的介绍 概念: std::string是C 标准库中用于处理字符串的类,它封装了对字符序列的操作,使得字符串处理更加便捷和安全。 特点: 1.动态内存管理:std::string会自动分配和释放内存,避免了手动管理内存…

Leetcode 283 移动零

引言 今天,看到了一个双指针算法,构思非常巧妙。这里特来记录一下。 正文 本题,我们使用两个指针,一左一右,右侧指针不断向右侧移动,如果右侧指针所指向的数据值不为 0,那么我们就交换右侧指针…

jmeter引入jar包的三种方式

示例 实现对登录密码进行MD5加密 pom文件依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.12&l…

90. UE5 RPG 实现技能的装配

在上一篇里&#xff0c;我们实现了在技能面板&#xff0c;点击技能能够显示出技能的相关描述以及下一级的技能的对应描述。 在这一篇里&#xff0c;我们实现一下技能的装配。 在之前&#xff0c;我们实现了点击按钮时&#xff0c;在技能面板控制器里存储了当前选中的技能的相关…

阿里云搜索专家实操:如何高效构建企业级 AI 搜索?

作者&#xff1a;来自阿里云搜索产品专家牛俊 本文由阿里云搜索产品专家牛俊在【AI 搜索 TechDay】上的分享【阿里云 AI 搜索 Demo 展示和动手实践】整理而成。 阿里云 AI 搜索的产品能力与业务价值 阿里云 AI 搜索的方案&#xff0c;基于阿里云 Elasticsearch Inference API…

Java巅峰之路---进阶篇---面向对象(一)

static关键字 介绍 static表示静态&#xff0c;是java中的一个修饰符&#xff0c;可以修饰成员方法&#xff0c;成员变量。 其中&#xff0c;被static修饰的成员变量&#xff0c;叫做静态变量&#xff1b;被static修饰的成员方法&#xff0c;叫做静态方法。 静态变量 调用…

牛客面经学习笔记(四)

这种拨码开关在PLC里面很是常用&#xff1a; 这种弧型线就很漂亮&#xff1a; 这个白色按键很漂亮&#xff1a; 快恢复保险丝&#xff1a; 继电器电路&#xff1a; 这里的续流二极管很重要&#xff0c;因为继电器是感性元件&#xff1a; 【【必考】5招搞清楚&#xff01;单点接…

【轻松拿捏】Java中ArrayList 和 LinkedList 的区别是什么?

ArrayList 和 LinkedList 的区别是什么&#xff1f; 1. ArrayList 2. LinkedList 3.总结 &#x1f388;边走、边悟&#x1f388;迟早会好 ArrayList 和 LinkedList 都是 Java 中常用的 List 接口的实现类&#xff0c;但它们在内部结构和操作性能上有所不同。 1. ArrayLis…

SpringBoot+Vue实现大文件上传(分片上传)

SpringBootVue实现大文件上传&#xff08;分片上传&#xff09; 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI 2 问题 前几篇文章&#xff0c;可以用于较小文件的上传&#xff0c;对于较大文件来说&#xff0c;为了提高上传效率和可靠性&#xff0c;可以采…

【1-4】设计模式概述

目录 一.设计模式产生背景 二.软件设计模式的概念 三.学习设计模式的必要性 四.设计模式分类 一.设计模式产生背景 二.软件设计模式的概念 软件设计模式&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多人知晓的、经过分类编目的、代码设计经验的总结。它描述了…

Python爬虫使用实例

IDE&#xff1a;大部分是在PyCharm上面写的 解释器装的多 → 环境错乱 → error&#xff1a;没有配置&#xff0c;no model 爬虫可以做什么&#xff1f; 下载数据【文本/二进制数据&#xff08;视频、音频、图片&#xff09;】、自动化脚本【自动抢票、答题、采数据、评论、点…

深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)

目录 &#x1f354; 前言 &#x1f354; 图像基础知识 1. 像素和通道的理解 2. 小节 &#x1f354; 卷积层 1. 卷积计算 2. Padding 3. Stride 4. 多通道卷积计算 5. 多卷积核卷积计算 6. 特征图大小 7. PyTorch 卷积层 API 7. 小节 &#x1f354; 池化层 1. 池…

代码随想录算法训练营第十六天(二叉树 四)

力扣题部分: 513.找树左下角的值 题目链接:. - 力扣&#xff08;LeetCode&#xff09; 题面: 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 思路(层序遍历): 应该是这道题最简单的方法了&#xff0…

C++ 设计模式——建造者模式

建造者模式 建造者模式组成部分建造者模式使用步骤1. 定义产品类2. 创建具体产品类3. 创建建造者接口4. 实现具体建造者5. 创建指挥者类6. 客户端代码 建造者模式 UML 图建造者模式 UML 图解析建造者模式的优缺点建造者模式的适用场景完整代码 建造者模式 建造者模式&#xff…

C语言—指针(1)

目录 一、内存和地址 &#xff08;1.1&#xff09;内存 &#xff08;1.2&#xff09;编址的理解 二、指针变量和地址 &#xff08;2.1&#xff09;取地址操作符&#xff08;&&#xff09; &#xff08;2.2&#xff09;指针变量和解引用操作符 &#xff08;2.2.1&…

XSS复现

目录 XSS简单介绍 一、反射型 1、漏洞逻辑&#xff1a; 为什么有些标签可以触发&#xff0c;有些标签不能触发 可以触发的标签 不能触发的标签 为什么某些标签能触发而某些不能 二、DOM型 1、Ma Spaghet! 要求&#xff1a; 分析&#xff1a; 结果&#xff1a; 2、J…

Unity项目优化记录

背景&#xff1a;测试反馈项目组游戏存在内存泄露&#xff0c;来找到中台这边协调排查。好家伙&#xff0c;跑了两次看了内存快照&#xff0c;再看资源组织和管理方式&#xff0c;存在的问题确实比较多。 1、修复内存泄露&#xff1a;结算界面由于资源引用丢失导致整个面板不会…