1.預設日誌內容介紹
預設的示例:
注釋:$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip位址;
$remote_user :用來記錄客戶端使用者名稱;
$time_local : 用來記錄訪問時間與時區;
$request : 用來記錄請求的url與http協議;
$status : 用來記錄請求狀態;成功是200,
$body_bytes_s ent :記錄傳送給客戶端檔案主體內容大小;
通常web伺服器放在反向**的後面,這樣就不能獲取到客戶的ip位址了,通過$remote_add拿到的ip位址是反向**伺服器的ip位址。
反向**伺服器在**請求的http頭資訊中,可以增加x_forwarded_for資訊,用以記錄原有客戶端的ip位址和原來客戶端的請求的伺服器位址;
2.日誌常用引數;
2.1access_log
語法:access_log path [format [buffer=size | off]]
預設值:access_log log/access.log combined
使用字段:http, server, location
引數為連線日誌指定了路徑,格式和緩衝區大小。使用「off」將在當前的字段中清除access_log的所有引數,如果沒有指定日誌格式,預設為「combined」。緩衝區大小不能超過寫入磁碟檔案的最小大小。
日誌檔案路徑可以包含變數(0.7.4以上版本),但是有一些限制:
nginx指定的使用者必須有建立日誌檔案的許可權。
緩衝區不會工作
每個到來的連線,日誌檔案將被開啟並且在記錄日誌後迅速關閉,然而,頻繁使用的檔案描述符將被儲存到open_log_file_cache中,關於日誌的輪詢記錄,必須記住隨著時間的過去(使用open_log_file_cache的valid引數設定),日誌仍然在舊的檔案中記錄。
nginx支援為每個location指定強大的日誌記錄。同樣的連線可以在同一時間輸出到不止乙個的日誌中,更多資訊請檢視multiple access_log directives in different contexts
2.1log_format
語法:log_format name format [format …]
預設值:log_format combined 」…」
使用字段:http server
描述記錄日誌的格式,格式中可以使用大多數變數,也包括一些在寫入日誌檔案過程中定義的變數:
$body_bytes_sent,減去應答頭後傳送給客戶端的位元組數,這個變數相容apache模組mod_log_config的%b引數(在0.3.10前這個變數為$apache_bytes_sent)。
$bytes_sent,傳送給客戶端的位元組數。
$connection,連線數。
$msec,正在寫入日誌條目的當前時間(精確到百萬分之一秒)
$pipe,如果請求為管道的。
$request_length,請求主體的長度。
$request_time,從乙個請求發出到而使nginx工作的時間,單位為毫秒(0.5.19版本後可以使用秒為單位)。
$status,應答的狀態(**)。
$time_local,寫入普通日誌格式的當地時間(伺服器時間)。
傳送到客戶端的頭中的變數以」sent_http_」標記開頭,如:$sent_http_content_range。
注意其他模組產生的變數同樣可以寫入日誌,例如你可以記錄前端負載均衡應答頭使用「upstream_http_」開頭的變數,具體請檢視負載均衡模組。
nginx有乙個預定的日誌格式稱為combined:
語法:open_log_file_cache max=n [inactive=time] [min_uses=n] [valid=time] | off
預設值:open_log_file_cache off
使用字段:http server location
這個指令為頻繁使用的日誌檔案描述符所在的路徑變數設定快取。
指令選項:
max - 快取中儲存的最大檔案描述符數。
inactive - 設定快取中在某個時間段內沒有使用的檔案描述符將被移除,預設為10秒。
min_uses - 在一定時間內(inactive指定),乙個檔案描述符最少使用多少次後被放入快取,預設為1。
valid - 設定檢查同名檔案存在的時間,預設是60秒。
off - 關閉快取。
nginx日誌切割方式
方式一:
nginx cronolog日誌分割配置文件,根據下面方法,每分鐘分割一次nginx訪問日誌。
1.nginx日誌配置
access_log access_log /data/access_log_pipe main;
2.先建立乙個命名管道
mkfifo /www/log/access_log_pipe
3.配置cronolog:
nohup cat /data/access_log_pipe | /usr/local/sbin/cronolog /data/log/domain.access_%y%m%d%h%m.log &
4.啟動nginx
/usr/local/nginx/sbin/nginx
注意:cronolog必須在nginx啟動前啟動
沒有安裝cronolog的話,需要先安裝
wget
tar zxvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
make
make install
方式二:
定時任務中每小時新增定時任務,執行一下指令碼,可以實現小時日誌分割
log_dir="/var/log/nginx"
date_dir=`date +%y/%m/%d/%h`
/bin/mkdir -p $/$ > /dev/null 2>&1
/bin/mv $/access.log $/$/access.log
kill -usr1 `cat /opt/nginx/logs/nginx.pid`
方式三:
使用logrotate做nginx日誌輪詢
logrotate看名字就知道是專門做日誌輪詢的,只把任務配置放在/etc/logrotate.d/下,任務就會自動完成,而且無需安裝,系統自帶,比較推薦使用.
vi /etc/logrotate.d/nginx
/usr/local/nginx/logs/www.willko.cn.log /usr/local/nginx/logs/nginx_error.log {
notifempty
daily
sharedscripts
postrotate
/bin/kill -usr1 `/bin/cat /usr/local/nginx/nginx.pid`
endscript
多個日誌以空格分開,
notifempty 如果日誌為空則不做輪詢
daily 每天執行一次
postrotate 日誌輪詢後執行的指令碼
這樣,每天都會自動輪詢,生成nginx.log.1-n
素數方面知識整理
一 判斷素數 int judge int n return1 注意 以上 中,for迴圈的結束條件是 i n i,相當於i sqrt n 兩種寫法都可以,只不過呼叫sqrt 函式會慢一些,因為for迴圈每次迴圈都會呼叫該函式。另外,不能寫成i i n 因為當n很接近int的最大值時,i i可能會溢位...
nginx的日誌切割小知識
今天讀了一篇文章 談談nginx訊號集 感興趣的同學可以檢視此鏈結 因為知識有限,其中有段話不是很理解,最後諮詢才了解原來如此,希望能對大家有些幫助。nginx的日誌切割 master 程序收到 sigusr1 後,會重新開啟所有已經開啟的檔案 比如日誌 然後向每個 worker 程序傳送 sigu...
jquery 方面知識
當需要取得 其中一行時 var items tr typeitemdata size 判斷 中是否有資料。tr td nth child 5 typeitemdata each function i,v 通過each函式讀取一行中第一列的值。mytrs live click function els...