nginx日志按照小时分割的方法
全局通用配置,http模块里设置,这样所有域名的访问日志都会被记录下来
理论上可以分割到毫秒秒,但是太占用资源,不太推荐
http {
#.....
#设置变量 year month day hour minutes seconds
map $time_iso8601 $year {
default '0000';
"~^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})" $1;
}
map $time_iso8601 $month {
default '00';
"~^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})" $2;
}
map $time_iso8601 $day {
default '00';
"~^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})" $3;
}
map $time_iso8601 $hour {
default '00';
"~^^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})" $4;
}
map $time_iso8601 $minutes {
default '00';
"~^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})" $5;
}
map $time_iso8601 $seconds {
default '00';
"~^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})" $6;
}
# 日志格式
log_format commonlog 'v1{|]$remote_addr:$remote_port{|]$http_x_forwarded_for{|]$upstream_addr{|]$time_iso8601{|]$request_method{|]$h
ost{|]$uri{|]$args{|]$status{|]$http_referer{|]$body_bytes_sent{|]$request_time{|]$upstream_response_time{|]$http_user_agent{|]$sent_
http_location{|]$http_cookie{|]$sent_http_content_type{|]$request_body{|]';
#记录日志,按天切割,也可以根据需要按小时切割
access_log logs/access_$year$month$day$hour.log commonlog;
#.....
}