当前位置: 首页 > article >正文

Nginx按指定格式记录访问日志

今天突然想起来一个日志的一个东西,因为拉项目无意中看到了日志文件的一些东西,现在不经常做后端了,加上其他的一些原因吧.有时候有些问题也没想太多,马马虎虎就过了,后来想想还是要记录一下这方面的处理过程吧: 

一般我们作为开发人员关注的日志只是在应用程序层面的,我们称它为应用程序日志,访问日志和错误日志可以被认为是应用程序日志的一部分,因为它们都与应用程序的运行状态和用户访问行为有关。

访问日志:

其实我们在用常用的web服务器上都有这项功能,我们这里用Nginx举例,我们的访问日志一般正常都是什么设备在什么地址访问了我们的什么资源,后端服务器的响应时间是多少,客户端请求处理的总时间是多少;请求使用的 HTTP 方法等等,常见的基本上就上面的这些了,那我们就可以在Nginx的HTTP块里面设置日志记录参数就行了,比如下面的配置:

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	log_format main '$remote_addr | $remote_user | [$time_local] | "$request" '
                  ' | $status $body_bytes_sent | "$http_referer" '
                  '| "$http_user_agent" | "$http_x_forwarded_for" | "$request_method" | request_total_time:"$request_time" | "$upstream_response_time"';
        access_log /var/log/nginx/access.log main;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

首先我们肯定先把访问日志打开(access_log),然后阐述一下上面的参数:

  1. $remote_addr:代表发起请求的客户端的IP地址。

  2. $remote_user:代表经过身份验证的用户的用户名,如果没有身份验证则为连字符(-)。

  3. [$time_local]:代表服务器处理请求时的本地时间,用方括号括起来。

  4. "$request":代表请求的第一行,包括HTTP方法、请求的URL和HTTP协议。

  5. |:是一个分隔符(管道符号),用于在日志条目中分隔不同的字段。

  6. $status:代表返回给客户端的状态码(例如,成功请求的状态码为200)。

  7. $body_bytes_sent:代表发送给客户端的响应的大小,以字节为单位。

  8. "$http_referer":代表Referer HTTP头部,指示引导客户端访问当前页面的页面的URL。

  9. "$http_user_agent":代表User-Agent HTTP头部,指示发起请求的客户端的用户代理(例如,浏览器)。

  10. "$http_x_forwarded_for":代表X-Forwarded-For HTTP头部,如果请求经过代理服务器或负载均衡器,则可能包含一个逗号分隔的客户端IP地址列表。

  11. "$request_method":代表请求中使用的HTTP方法(例如,GET、POST)。

  12. request_total_time:"$request_time":代表处理请求所花费的总时间,包括上游处理时间。数值被双引号括起来。

然后我们重启一下Nginx 服务器,再去请求就可以看到日志 文件已经陆续写入了:看一下效果

你会看到access.log已经开始记录了,那如果我们每每天都会有大量的记录放在同一个文件会不会时间就了会很臃肿这个文件,至于这个问题你可以用 logrotate 日志轮转操作去解决, 这边我用了小时级别的划分,每隔一个小时都会轮转一下;

/var/log/nginx/*.log {
        hourly
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                invoke-rc.d nginx rotate >/dev/null 2>&1
        endscript
}
~                        

所以你会看到很多access.log文件,

关于logrotate后面会更新 ,学过linux的应该都知道这个玩意,很方便的程序,基本也是Linux的预装程序,时间有点夜深了,先写到这里


http://www.kler.cn/news/163133.html

相关文章:

  • 联邦多任务蒸馏助力多接入边缘计算下的个性化服务 | TPDS 2023
  • 【LeetCode】28. 找出字符串中第一个匹配项的下标 【字符串单模匹配:KMP算法】
  • Linux设备分类与设备号
  • Django讲课笔记01:初探Django框架
  • 面试宝典之自我介绍
  • 【嵌入式开发 Linux 常用命令系列 4.2 -- .repo 各个目录介绍】
  • 集简云 x 零售企业丨快速集成有赞商城和微盛企微管家,实现私域运营自动化
  • YOLOv8分割训练及分割半自动标注
  • Android MVVM+coroutine+retrofit+flow+hilt
  • LSTM_预测价格问题_keras_代码实操
  • 喜讯:加速度商城系统全系列产品品牌全新升级为Shopfa
  • Java工程找不到javax.xml.bind.annotation包
  • 【flink番外篇】1、flink的23种常用算子介绍及详细示例(3)-window、distinct、join等
  • STM32 map文件详解
  • Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版
  • running小程序重要技术流程文档
  • 【ELK03】ES 索引的Mapping映射详解、数据类型和settings属性设置
  • 算法:常见的链表算法
  • 插入排序——直接插入排序和希尔排序(C语言实现)
  • 如何进行更好的面试回复之缓存函数在项目中的性能优化?
  • Advanced Renamer
  • 利用R语言heatmap.2函数进行聚类并画热图
  • Shell脚本如何使用 for 循环、while 循环、break 跳出循环和 continue 结束本次循环
  • Vue学习笔记-Vue3中的计算属性与监视属性
  • 【数据结构】拆分详解 - 二叉树的链式存储结构
  • 消费升级:无人零售的崛起与优势
  • 【MATLAB源码-第97期】基于matlab的能量谷优化算法(EVO)机器人栅格路径规划,输出做短路径图和适应度曲线。
  • git操作:使用vscode集成
  • Spring Cloud Gateway中对admin端点进行认证
  • 自动补全的 select antd react