nginx日志打印及分割

日志对于统计排错来说非常有利的。本文总结了nginx日志相关的配置如access_log、log_format、open_log_file_cache、log_not_found、log_subrequest、rewrite_log、error_log。
nginx有一个非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令来定义。ngx_http_log_module是用来定义请求日志格式的。
1. access_log指令

语法: access_log path [format [buffer=size [flush=time]]];
access_log path format gzip[=level] [buffer=size] [flush=time];
access_log syslog:server=address[,parameter=value] [format];
access_log off;
默认值: access_log logs/access.log combined;
配置段: http, server, location, if in location, limit_except
gzip压缩等级。
buffer设置内存缓存区大小。
flush保存在缓存区中的最长时间。
不记录日志:access_log off;
使用默认combined格式记录日志:access_log logs/access.log 或 access_log logs/access.log combined;
2. log_format指令

语法: log_format name string …;
默认值: log_format combined “…”;
配置段: http

name表示格式名称,string表示等义的格式。log_format有一个默认的无需设置的combined日志格式,相当于apache的combined日志格式,如下所示:

 

log_format  combined  '$remote_addr - $remote_user  [$time_local]  '
                                   ' "$request"  $status  $body_bytes_sent  '
                                   ' "$http_referer"  "$http_user_agent" ';

 

如果nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址了。 $remote_addr获取反向代理的IP地址。反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用来记录 客户端IP地址和客户端请求的服务器地址。PS: 获取用户真实IP 参见http://www.ttlsa.com/html/2235.html如下所示:

log_format  porxy  '$http_x_forwarded_for - $remote_user  [$time_local]  '
                             ' "$request"  $status $body_bytes_sent '
                             ' "$http_referer"  "$http_user_agent" ';

日志格式允许包含的变量注释如下:

复制代码
$remote_addr, $http_x_forwarded_for(反向) 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection 连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local 通用日志格式下的本地时间。
复制代码
[warning]发送给客户端的响应头拥有“sent_http_”前缀。 比如$sent_http_content_range。[/warning]

实例如下:

复制代码
http {
 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                        '"$status" $body_bytes_sent "$http_referer" '
                                        '"$http_user_agent" "$http_x_forwarded_for" '
                                        '"$gzip_ratio" $request_time $bytes_sent $request_length';
 
 log_format srcache_log '$remote_addr - $remote_user [$time_local] "$request" '
                                '"$status" $body_bytes_sent $request_time $bytes_sent $request_length '
                                '[$upstream_response_time] [$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]';
 
 open_log_file_cache max=1000 inactive=60s;

 server {
 server_name ~^(www\.)?(.+)$;
 access_log logs/$2-access.log main;
 error_log logs/$2-error.log;
 
 location /srcache {
 access_log logs/access-srcache.log srcache_log;
 }
 }
}
复制代码

3. open_log_file_cache指令

语法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
默认值: open_log_file_cache off;
配置段: http, server, location

对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off),格式如下:
参数注释如下:
max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
inactive:设置存活时间,默认是10s
min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
valid:设置检查频率,默认60s
off:禁用缓存
实例如下:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

4. log_not_found指令

语法: log_not_found on | off;
默认值: log_not_found on;
配置段: http, server, location
是否在error_log中记录不存在的错误。默认是。

5. log_subrequest指令

语法: log_subrequest on | off;
默认值: log_subrequest off;
配置段: http, server, location
是否在access_log中记录子请求的访问日志。默认不记录。

6. rewrite_log

由ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启。 Nginx重写规则指南
语法: rewrite_log on | off;
默认值: rewrite_log off;
配置段: http, server, location, if
启用时将在error log中记录notice级别的重写日志。

7. error_log指令

语法: error_log file | stderr | syslog:server=address[,parameter=value] [debug | info | notice | warn | error | crit | alert | emerg];
默认值: error_log logs/error.log error;
配置段: main, http, server, location
配置错误日志。

 

 


 

 

                日志切割

 

nginx日志默认情况下统统写入到一个文件中,文件会变的越来越大,非常不方便查看分析。以日期来作为日志的切割是比较好的,通常我们是以每日来做统计的。下面来说说nginx日志切割。

 

1. 定义日志轮滚策略

# vim nginx-log-rotate

复制代码
/data/weblogs/*.log {
    nocompress
    daily
    copytruncate
    create
    notifempty
    rotate 7
    olddir /data/weblogs/old_log
    missingok
    dateext
    postrotate
        /bin/kill -HUP `cat /var/run/nginx.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
复制代码

[warning]/data/weblogs/*.log使用通配符时,/data/weblogs/目录下的所有匹配到的日志文件都将切割。如果要切割特定日志文件,就指定到该文件。[/warning]

2. 设置计划任务

59 23 * * * root ( /usr/sbin/logrotate -f /PATH/TO/nginx-log-rotate)

这样每天23点59分钟执行日志切割。

 来自:http://www.ttlsa.com/nginx/nginx-tutorial-from-entry-to-the-master-ttlsa/

#----------All efforts I have paid today...
<think>嗯,用户问的是如何在Linux中使用tail命令实时查看日志文件,需要示例。首先,我得确认用户的基本需求:他们可能是在系统管理或者开发过程中需要监控日志的变化,比如调试应用或者跟踪系统问题。 首先,我应该回忆一下tail命令的基本用法。-f参数是关键,用于实时跟踪文件末尾的变化。但用户可能需要更多具体的例子,比如不同的参数组合或者过滤日志内容的情况。比如,用户可能不仅想查看所有内容,还想过滤出特定的关键字,比如“ERROR”或者“INFO”,这时候结合grep命令会很有用。 然后,用户可能对如何同时监控多个日志文件感兴趣,这时候-n参数可以调整显示的行数,或者用-F来处理文件被轮转的情况。比如,日志文件按天切割后,-F可以继续跟踪新文件,而-f可能不会。这点需要解释清楚,避免用户遇到文件轮转时tail停止工作的问题。 还要考虑用户是否有权限问题,或者日志文件路径是否正确。但用户的问题主要是命令示例,所以应该集中在命令的写法上。比如,基本的tail -f /var/log/syslog,然后进阶的如搭配grep过滤,或者同时跟踪多个文件。 另外,可能需要提醒用户,不同的Linux发行版日志文件的位置可能不同,比如有的系统用/var/log/messages,有的用journalctl。不过用户明确提到了tail命令,所以应该集中在常见的日志路径,比如syslog、nginx的access.log等。 最后,需要检查是否有其他有用的参数,比如--retry在文件不可访问时重试,或者使用Ctrl+C退出跟踪。这些细节能帮助用户更好地使用命令,避免常见问题。</think>### Linux中实时查看日志的`tail`命令示例 在Linux中,使用`tail`命令配合特定参数可以实时监控日志文件的更新内容。以下是具体方法和示例: --- #### 1. **基础实时监控** 命令格式: ```bash tail -f 日志文件路径 ``` 示例: ```bash tail -f /var/log/syslog # 实时跟踪系统日志 tail -f /var/log/nginx/access.log # 实时查看Nginx访问日志 ``` - **作用**:`-f`参数会持续输出文件新增内容,适用于实时追踪日志更新[^3]。 --- #### 2. **过滤关键字(结合`grep`)** 若需仅显示包含特定关键字的日志(如错误信息): ```bash tail -f /var/log/app.log | grep "ERROR" ``` - **作用**:实时过滤出含“ERROR”的日志条目,便于快速定位问题[^2]。 --- #### 3. **显示指定行数 + 实时跟踪** 若需先显示最后若干行再实时更新: ```bash tail -n 50 -f /var/log/messages # 先显示最后50行,再实时跟踪 ``` - **作用**:`-n 50`指定初始显示行数,适合查看近期日志后再进入实时模式。 --- #### 4. **同时监控多个日志文件** 使用通配符监控同一目录下多个日志: ```bash tail -f /var/log/*.log # 实时跟踪所有.log后缀的日志文件 ``` --- #### 5. **处理日志轮转(`-F`参数)** 当日志文件被轮转(如按日期分割)时,使用`-F`代替`-f`: ```bash tail -F /var/log/service.log # 自动跟踪新生成的日志文件 ``` - **区别**:`-F`会检测文件是否被重建或重命名,更适合日志轮转场景[^1]。 --- #### 6. **调整刷新频率(`-s`参数)** 设置刷新间隔(如每2秒更新一次): ```bash tail -f -s 2 /var/log/debug.log # 降低实时更新频率以节省资源 ``` --- #### 总结示意图 $$ \begin{aligned} &\text{常用参数组合} \\ &-f: \text{实时跟踪} \\ &-n: \text{初始显示行数} \\ &-F: \text{处理日志轮转} \\ &| grep: \text{过滤内容} \end{aligned} $$ ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值