当前位置: 首页 > 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/a/163133.html

相关文章:

  • [CKS] K8S NetworkPolicy Set Up
  • 车-路-站-网”信息耦合的汽车有序充电
  • linux设置主机名
  • HarmonyOS 如何实现传输中的数据加密
  • 94个属于一区且接受医工交叉领域投稿的期刊汇总|个人观点·24-11-13
  • 基于Python+Django+Vue3+MySQL实现的前后端分类的商场车辆管理系统
  • 联邦多任务蒸馏助力多接入边缘计算下的个性化服务 | 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语言实现)
  • 如何进行更好的面试回复之缓存函数在项目中的性能优化?