如题
一、nginx主要有三种log:
- 记录系统信息的
- 记录http框架信息的
- 记录访问信息的
性质 | 1.系统信息log | 2.http框架信息log | 3.记录访问信息log |
---|---|---|---|
默认文件[1] | error.log | error.log | access.log |
记录的信息 | 系统信息,比如内存申请,时间更新,事件分发 | 关于HTTP事件的信息,比如建立连接,建立请求上下文,处理阶段 | 详细记录访问信息,支持变量和自定义格式 |
主要谁在用 | cycle,各个核心代码和框架代码(除http) | listening,connection,event使用的多 | ngx_http_log_module模块使用,也是11个处理阶段中最后一个阶段 |
[1]关于默认文件的说明:1和2默认记录在相同文件,也可以不同文件。配置项也相同,都是error_log,只不过作用域不同。
二、主要人物都使用的哪种类型log
1. ngx_cycle_t
用的就是初始化的时候设置的,log = ngx_log_init(ngx_prefix);
从init_cycle
(只在初始化的时候用到)再传到ngx_cycle
。
2. ngx_event_t
作为ls的c的rev的log是从c中拿过来的,而作为ls的c的log是从ls拿过来的:
1 | c->log = &ls[i].log; |
作为接收连接的log跟c的log一样,见下方。
3. ngx_listening_t
用的error_log
配置项指定的文件,新建的:
1 | ls->logp = clcf->error_log; |
表示的是新建立连接时候的日志,在遍历建立起来的ls的时候,又重新配置了一遍所有的ls
1 | ls[i].log = *ls[i]logp; |
所以logp只是初始化配置的时候使用的。
4. ngx_connection_t
自己申请的log = ngx_palloc(c->pool, sizof(ngx_lot_t));
,但值是从ls->log中拿来的*log = ls->log;
。
5. http
由ngx_http_log_module.c
提供的,可以进行的配置项有:
1 | log_format |
主要是操作access.log的,记录响应的访问及处理信息。
三、核心函数
只有一个:
1 | void ngx_log_error_core(); |
实现了三次,主要是为了跨平台:
1 | #if (NGX_HAVE_C99_VARIADIC_MACROS) |
另外,在系统初始化的时候,并没有配置好日志文件,因此日志是输出到终端的,当从配置文件或命令行参数中获取并正确配置好后,才将后续日志写入文件中。