nginx access_log 完全关闭
最近在配置本地nginx开发环境时,发现一个问题,当server段不指定access_log时,并且http段中也未指定任何 access_log参数时,它会默认写到logs/access.log这个文件,也就是access_log默认值就是”logs /access.log”,而且是所有server的访问日志。但nginx网站上我并未找到此配置的默认值。
如果我们不需要,在http段中加一行access_log off;然后在特定的server中配置自己想写入的日志。开发环境我默认不写日志,即不配置任何access_log,需要时才打开。
nginx的http段中,设置access log:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; log_format gzip '$remote_addr - $remote_user [$time_local] "$request" ' '$status $bytes_sent "$http_referer" ' '"$http_user_agent" "$gzip_ratio"'; log_format download '$remote_addr - $remote_user [$time_local] "$request" ' '$status $bytes_sent "$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"'; #access_log logs/access.log main; access_log off; nginx关闭日志功能access_log关闭
正确关闭方式:
- access_log off;
- error_log /dev/null;
access.log 按日期分割日志:
listen 80;
server_name _;
if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') {
set $day $1;
}
access_log /data/wwwlogs/sms_nginx_$day.log combined;
server
{
……
#从系统时间中正则匹配出年月日
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
set $date $1$2$3;
}
# 日期记录日志
access_log logs/$date.host.access.log;
}
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
{
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
set $minutes $5;
set $seconds $6;
}
日志shell 脚本切割:
# vi logcron.sh
log_dir="/data/logs/nginx"
date_dir=`date +%Y%m%d`
/bin/mkdir -p ${log_dir}/${date_dir} > /dev/null 2>&1
/bin/mv ${log_dir}/access.log ${log_dir}/${date_dir}/access.log
kill -USR1 `cat /opt/nginx/logs/nginx.pid`
定义一个cron,在每天晚上23:59:50执行这个脚本,后面的事情就交给awstats了。
Nginx Access Log日志统计分析常用命令
https://www.cnblogs.com/freespider/p/9761789.html
http://blog.itpub.net/21220384/viewspace-2139952/
日志监控:
Nginx日志分割,异常邮件预警
https://blog.youkuaiyun.com/zhu6201976/article/details/85809239
Linux shell 脚本发送邮件:
#shell send email
from_name="test@test.org"
from="test@<span style="font-family: Arial, Helvetica, sans-serif;">test</span>.com"
to="nick@test.com"
cc_name="AAA"
cc="AAA@test.com"
email_title="test@test.org"
email_content="/home/file_log.log"
email_subject="[Testing]"
echo -e "To: \"${email_title}\" <${to}>\nCc: \"${cc_name}\" <${cc}>\nFrom: \"${from_name}\" <${from}>\nSubject: ${email_subject}\n\n`cat ${email_content}`" | /usr/sbin/sendmail -t
按日期:
一:
if ($time_iso8601 ~ "(\d{4}-\d{2}-\d{2})") {
set $day $1;
}
access_log logs/host.access_$day.log combined;
结果:host.access_2020-08-27.log
-------------------------------------------------------------------------
二:
if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
set $time $1$2$3;
}
access_log logs/host.access_$time .log combined;
结果:host.access_20200826.log
两种写法其实是一样的,第一种把日期做成一个参数,第二个是把日期做成三个参数(一个括号一个参数)
combined是按默认日志格式
还可以按指定日志格式:
log_format time_log_format '$remote_addr - $remote_user [$time_local] "$request" - $request_time - $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" - [$upstream_response_time]';
access_log logs/host.access_$time .log time_log_format;
按小时生成:
if ($time_iso8601 ~ "(\d{4}-\d{2}-\d{2}T\d{2})") {
set $day $1;
}
access_log logs/host.access_$day.log combined;
结果:host.access_2020-08-27T00.log