【充电】《Nginx核心知识100讲》Log阶段:index模块
极客专栏《Nginx核心知识100讲》68小节,笔记
注意:这个是看专栏视频,敲的哈。这个专栏让我收货蛮大的。
68 | access日志的详细用法
image.png介绍下11个阶段的最后一个阶段Log阶段中的log模块,这个模块是用来记录日志的。
log模块
image.pngaccess 日志格式
image.png配日志文件路径
image.png如果在path中包含变量,肯定会有一个问题,可能每一个请求,这个变量是不同的。所以意味着很可能每一个请求都会记录到不同的文件中。所以nginx怎么办呢?只能没记录一条日志都需要打开,记录完之后再关闭。可以想象它的性能是非常糟糕的。
日志缓存:每记录一条日志,这个日志的大小并不大,但是引发了一个IO调用,如果是机械磁盘的话,就会引发磁头旋转然后记录日志。实际上会消耗几十毫秒。如果我们积累到一批日志再写入,这样就省去了。很多次的磁头旋转的时间。加了buffer之后,什么时候开始写进去磁盘呢?有三种条件。
日志压缩:因为日志是文本格式,如果做压缩的话,有很高的压缩率。打开压缩的时候相当于打开缓存了。因为不是每一条日志压缩一次,而是一批日志压缩一次。一批日志多大呢?64kb。
对日志文件名包含变量时的优化
当我们的access log的路径含有变量的时候 ,为了优化,不用每次都打开关闭,我们用open_log_file_cache来打开一个缓存。使得含有变量的日志文件不会经常打开关闭。
image.png留言问题
1.open_log_file_cache这么好的功能,默认为何不开启呢?是因为异常重启会导致日志更新丢失么?
这个cache,可以缓存nginx所有日志吗?比如access_log,error log.
作者回复
不是哦,它只是减少了open和close的次数,不会缓存内容的。
这个功能会在其他进程修改被缓存的文件时,导致缓存住的句柄失效。
这个功能不只应用在日志上,对于访问静态文件一样有用,比如打开sendfile时,完全不需要再open和close。第四部分有一节课会详细讲该功能。