今天突然想起來一個日志的一個東西,因為拉項目無意中看到了日志文件的一些東西,現在不經常做后端了,加上其他的一些原因吧.有時候有些問題也沒想太多,馬馬虎虎就過了,后來想想還是要記錄一下這方面的處理過程吧:?
一般我們作為開發人員關注的日志只是在應用程序層面的,我們稱它為應用程序日志,訪問日志和錯誤日志可以被認為是應用程序日志的一部分,因為它們都與應用程序的運行狀態和用戶訪問行為有關。
訪問日志:
其實我們在用常用的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: POODLEssl_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),然后闡述一下上面的參數:
-
$remote_addr
:代表發起請求的客戶端的IP地址。 -
$remote_user
:代表經過身份驗證的用戶的用戶名,如果沒有身份驗證則為連字符(-)。 -
[$time_local]
:代表服務器處理請求時的本地時間,用方括號括起來。 -
"$request"
:代表請求的第一行,包括HTTP方法、請求的URL和HTTP協議。 -
|
:是一個分隔符(管道符號),用于在日志條目中分隔不同的字段。 -
$status
:代表返回給客戶端的狀態碼(例如,成功請求的狀態碼為200)。 -
$body_bytes_sent
:代表發送給客戶端的響應的大小,以字節為單位。 -
"$http_referer"
:代表Referer HTTP頭部,指示引導客戶端訪問當前頁面的頁面的URL。 -
"$http_user_agent"
:代表User-Agent HTTP頭部,指示發起請求的客戶端的用戶代理(例如,瀏覽器)。 -
"$http_x_forwarded_for"
:代表X-Forwarded-For HTTP頭部,如果請求經過代理服務器或負載均衡器,則可能包含一個逗號分隔的客戶端IP地址列表。 -
"$request_method"
:代表請求中使用的HTTP方法(例如,GET、POST)。 -
request_total_time:"$request_time"
:代表處理請求所花費的總時間,包括上游處理時間。數值被雙引號括起來。
然后我們重啟一下Nginx 服務器,再去請求就可以看到日志 文件已經陸續寫入了:看一下效果
你會看到access.log已經開始記錄了,那如果我們每每天都會有大量的記錄放在同一個文件會不會時間就了會很臃腫這個文件,至于這個問題你可以用?logrotate 日志輪轉操作去解決, 這邊我用了小時級別的劃分,每隔一個小時都會輪轉一下;
/var/log/nginx/*.log {hourlymissingokrotate 14compressdelaycompressnotifemptycreate 0640 www-data admsharedscriptsprerotateif [ -d /etc/logrotate.d/httpd-prerotate ]; then \run-parts /etc/logrotate.d/httpd-prerotate; \fi \endscriptpostrotateinvoke-rc.d nginx rotate >/dev/null 2>&1endscript
}
~
所以你會看到很多access.log文件,
關于logrotate后面會更新?,學過linux的應該都知道這個玩意,很方便的程序,基本也是Linux的預裝程序,時間有點夜深了,先寫到這里