当前位置 主页 > 服务器问题 > nginx问题汇总 >

解析Nginx中的日志模块及日志基本的初始化和过滤配置

栏目:nginx问题汇总 时间:2018-10-06 16:57

ngx_errlog_module是Nginx中用来管理日志的模块,解析Nginx中的日志模块及日志基本的初始化和过滤配置,需要的朋友可以参考下

无论在任何项目中,日志都是一个非常重要的模块,无论是问题定位还是日常信息的管理,都离不开他

在nginx中,ngx_errlog_module模块专门用于处理nginx日志信息,是nginx的core模块之一

在 main 函数中,时间初始化结束后马上进行的就是日志模块的初始化

日志结构:
日志模块的初始化主要做的事情就是初始化全局变量 ngx_log,并创建 errlog 文件

ngx_log_s 结构
ngx_log 变量是一个 ngx_log_s 结构体,定义在 core/ngx_log.h 文件中,结构如下:

// struct ngx_log_s// 日志结构 {{{struct ngx_log_s { ngx_uint_t   log_level;  // 日志等级 ngx_open_file_t  *file;   // 日志文件信息 ngx_atomic_uint_t connection; // 引用该日志对象的连接数 ngx_log_handler_pt handler;  // 输出日志时需要调用的回调函数 void    *data;   // 回调函数所需要的参数 ngx_log_writer_pt writer; void    *wdata; /*  * we declare "action" as "char *" because the actions are usually  * the static strings and in the "u_char *" case we have to override  * their types all the time  */ char    *action;  // 日志记录前,保存当前正在进行的动作 ngx_log_t   *next;   // 指向下一日志对象}; // }}}

日志级别
nginx 中日志共分为9个级别:

#define NGX_LOG_STDERR   0#define NGX_LOG_EMERG    1#define NGX_LOG_ALERT    2#define NGX_LOG_CRIT    3#define NGX_LOG_ERR    4#define NGX_LOG_WARN    5#define NGX_LOG_NOTICE   6#define NGX_LOG_INFO    7#define NGX_LOG_DEBUG    8

 
ngx_open_file_s 结构
其中,日志的文件描述结构如下:

// struct ngx_open_file_s// 打开文件结构 {{{struct ngx_open_file_s { ngx_fd_t    fd; ngx_str_t    name; void    (*flush)(ngx_open_file_t *file, ngx_log_t *log);   // 文件刷新时调用的回调 void     *data; // 回调函数使用的参数}; // }}}
所有文件相关的数据结构和操作都在 core/ngx_conf_file.h 和 core/ngx_conf_file.c 文件中

日志初始化过程
日志相关的初始化操作都在 core/ngx_log.c 文件中,现在我们调用的是其中的初始化函数:

// ngx_log_t *ngx_log_init(u_char *prefix);// 初始化 ngx_log 结构,创建 errlog 文件 {{{ngx_log_t *ngx_log_init(u_char *prefix){ u_char *p, *name; size_t nlen, plen; ngx_log.file = &ngx_log_file; ngx_log.log_level = NGX_LOG_NOTICE; name = (u_char *) NGX_ERROR_LOG_PATH; /*  * we use ngx_strlen() here since BCC warns about  * condition is always false and unreachable code  */ nlen = ngx_strlen(name); if (nlen == 0) {  ngx_log_file.fd = ngx_stderr;  return &ngx_log; } p = NULL; // 判断是否是绝对路径#if (NGX_WIN32) if (name[1] != ':') {#else if (name[0] != '/') {#endif  if (prefix) {   plen = ngx_strlen(prefix);  } else {#ifdef NGX_PREFIX   prefix = (u_char *) NGX_PREFIX;   plen = ngx_strlen(prefix);#else   plen = 0;#endif  }  if (plen) {   name = malloc(plen + nlen + 2);   if (name == NULL) {    return NULL;   }   p = ngx_cpymem(name, prefix, plen);   if (!ngx_path_separator(*(p - 1))) {    *p++ = '/';   }   ngx_cpystrn(p, (u_char *) NGX_ERROR_LOG_PATH, nlen + 1);   p = name;  } } ngx_log_file.fd = ngx_open_file(name, NGX_FILE_APPEND,         NGX_FILE_CREATE_OR_OPEN,         NGX_FILE_DEFAULT_ACCESS); if (ngx_log_file.fd == NGX_INVALID_FILE) {  ngx_log_stderr(ngx_errno,      "[alert] could not open error log file: "      ngx_open_file_n " \"%s\" failed", name);#if (NGX_WIN32)  ngx_event_log(ngx_errno,      "could not open error log file: "      ngx_open_file_n " \"%s\" failed", name);#endif  ngx_log_file.fd = ngx_stderr; } if (p) {  ngx_free(p); } return &ngx_log;}// }}}



缩小 缩小 缩小 缩小
IIS7整站下载工具 IIS7批量查询排名 IIS7远程桌面连接工具 iis7-iis网站批量管理 iis7批量替换工具 IIS7服务器专用下载工具 IIS7日志分析工具 IIS7批量PING,服务器批量添加网卡IP小工具 IIS7远程同步备份工具
IIS7网站监控 站群批量SEO查询 批量获取排名域名 批量关键词排名查询 模拟各种蜘蛛 批量友情链接监测 批量检测死链 搜索引擎大全 批量查询外链
批量查询网站标题 批量查询KeyWords 批量查询描述 批量查询网站IP 批量百度收录查询 批量查询百度日收录 批量查询百度周收录 批量查询百度月收录 批量查询360总收录 批量查询360日收录 批量查询网站年龄 批量查询360PC权重 批量查询爱站移动权重 批量查询站长移动权重 批量查询360移动权重 批量查询神马权重 批量查询谷歌PR 批量查询搜狗PR 批量查询百度反链 批量查询爱站首页反链 批量查询爱站内页反链 批量查询百度快照 批量查询搜狗快照 批量icp备案查询 批量网站ip地址查询 批量查询导出链接 批量查询百度V认证 批量查询百度安全 批量查询站长PC权重 批量查询爱站PC权重 批量查询搜狗总收录 站长资源大全 IIS7-cms大全 IIS7站群大全 IIS7虚拟空间大全 IIS7服务器大全 IIS7-VPS大全 服务器代购 站群专用 美国站群服务器 香港站群服务器 特供站群vps 亚洲服务器 菲律宾HS 韩国首尔 香港PCCW 香港沙田电信 香港PowerLine 日本多机房 新加坡多机房 韩国大带宽 香港新世界 香港Pangnet 台湾 美国服务器 加州RS 美国vps母鸡租用 洛杉矶MC 洛杉矶C3 特价促销区 洛杉矶NS 洛杉矶Cera高防 洛杉矶HS高防 SK高防 洛杉矶WX 加州RH 芝加哥AT VPS云主机 香港沙田电信 韩国首尔 香港Pangnet 新加坡SG 香港PL 洛杉矶SK 抗攻击 洛杉矶C3 日本大阪 洛杉矶Cera 抗攻击 洛杉矶MC 纽约 SSD 抗攻击 大容量备份VPS 国庆大促 俄罗斯