接口列表

核心文件ngx_log.h

主要接口如下:

ngx_log_error(level, log, err, fmt, ...)

ngx_log_debug(level, log, err, fmt, ...)

ngx_log_debug0(level, log, err, fmt)

ngx_log_debug1(level, log, err, fmt, arg1)

ngx_log_debug2(level, log, err, fmt, arg1, arg2)

ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3)

ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4)

ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5)

ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)

ngx_log_debug7(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7)

ngx_log_debug8(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)

可以简单分成三组

ngx_log_error(level, log, err, fmt, ...)

ngx_log_debug(level, log, err, fmt, ...)

ngx_log_debugX(level, log, err, fmt, ...)

ngx_log_error接口

ngx_log_error(level, log, err, fmt, ...) 标准的分级打印接口。

第1个参数level可选宏如下:

#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

打印等级通过nginx.conf中的error_log指令可以配置,其中WARN以上级别打印会直接打印到stderr上,对于某些临时调试场景有意义。

第2个参数log,用于部分回调功能。(还未深入研究)【个人认为此参数应该以全局变量方式存在,不应该设置为参数,影响在算法模块中使用日志】

常见获取方式包括

[ngx_conf_t].log
[ngx_http_request_t].connection.log
[ngx_connection_t].log

第3个参数err,用于记录errno,非系统调用错误,一般使用0即可。【个人认为此参数过设计】

后续参数为可变长的字符串参数,其中针对ngx常用的几个类型有特殊定义,可以参考下文中的表格。

使用示例:

static void*
ngx_http_mytest_create_srv_conf(ngx_conf_t *cf)
{
...
ngx_log_error(NGX_LOG_ALERT, cf->log, 0, "ngx_http_mytest_create_srv_conf");
...
}
static ngx_int_t
ngx_http_ws_cache_info_filter(ngx_http_request_t *r)
{
...
ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "ws_cache_info context already exist!");
...
}

ngx_log_debug接口

第一个参数,实际上为模块类型标识,会与log->log_level进行比对,如果比对失败将不进行打印。

进行打印时功能等价于ngx_log_error的NGX_LOG_DEBUG级别,后续参数含义也一致。

#define NGX_LOG_DEBUG_CORE        0x010
#define NGX_LOG_DEBUG_ALLOC 0x020
#define NGX_LOG_DEBUG_MUTEX 0x040
#define NGX_LOG_DEBUG_EVENT 0x080
#define NGX_LOG_DEBUG_HTTP 0x100
#define NGX_LOG_DEBUG_MAIL 0x200
#define NGX_LOG_DEBUG_STREAM 0x400

注意:ngx_log_debug接口并不在NGX_DEBUG宏限制范围内,也就是说即使编译时没有添加--debug参数,ngx_log_debug接口依然可以使用。

【个人认为:level参数没有意义应该删除,接口应该放在NGX_DEBUG宏限制范围内,与ngx_log_debugX语义保持一致】

使用示例:

static ngx_int_t
ngx_http_ws_cache_info_filter(ngx_http_request_t *r)
{
...
ngx_log_debug(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "enter ngx_http_ws_cache_info_filter");
...
}

ngx_log_debugX接口

用于固定数量参数的打印接口,参数与ngx_log_debug一致,接口定义在NGX_DEBUG宏限制范围内,即必须在编译时开启--debug参数,这组接口才能使用。

【个人认为:ngx_log_debugX接口本意应该为了不支持动态数量参数的C编译器设计的,一般通途不大,但它时唯一一组可以通过编译参数去除的调试接口,所以还有广泛使用。根因还是ngx_log_debug接口设计不合理】

使用示例:

static ngx_int_t
ngx_http_ws_cache_info_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data)
{
...
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "arg_name=%V", &arg_name);
...
}

ngx特殊格式化

标识符 对应类型
%O off_t
%T time_t
%z ssize_t
%i ngx_int_t
%p void *
%V ngx_str_t *
%s u_char * (null-terminated)
%*s size_t + u_char *

更多完成的标识符可以参考《深入理解Nginx(第2版)》P148 表4-8

nginx开发_调试日志的更多相关文章

  1. nginx开发_配置项

    nginx开发笔记_配置项 模块的配置项即nginx.conf中的指令,HTTP模块指令可以分为三个级别: main级,直接写在http{}块中的指令 server级,写在server{}块中的指令 ...

  2. nginx开发_字符串操作函数

    由于ngx_str_t为非NULL结尾的函数,且网络请求中有大量忽略大小写的需求,所以nginx内部封装了许多字符串操作相关的函数,函数名称极其相识,且使用时有有些约定,特此整理. 赋值&拷贝 ...

  3. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

  4. Arcgis Runtime 100.3开发实例源代码调试日志

    Arcgis Runtime 100.3开发实例源代码调试日志 路径: "D:\arcgis runtime1003\arcgis-runtime-samples-dotnet-master ...

  5. nginx 学习笔记(5) nginx调试日志

    为启动一个调试日志,nginx需要在构建时配置城支持调试模式. ./configure --with-debug ... 而且调试级别应该使用err_log指令来设置: err_log /path/t ...

  6. Nginx开发从入门到精通 学习目录分享学习 (阿里著作)

    Nginx开发从入门到精通   缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块的开发以及它的内部 ...

  7. nginx自动切割访问日志

    Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息. 一条典型的Web访问日志 ...

  8. 关于调试日志Log

    __VA_ARGS__  是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参数的个数为0时,这里的## ...

  9. Nginx 基本配置和日志分析

    最近在维护的一个项目,路由转发规则都统一通过Nginx转发,所以再次参考部分博文和书本,熟悉Nginx的基本配置,还有一个重点也是日志的分析 Nginx 常用模块是server块,location块. ...

随机推荐

  1. AC日记——凌乱的yyy 洛谷 P1803

    题目背景 快noip了,yyy很紧张! 题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加 ...

  2. 测试开发系列之Python开发mock接口(二)

    上一篇咱们已经把开发前的环境准备好了,还需要再做一点准备,你的账户信息是存在哪的呢,当然是存在数据库里的,咱们在去支付,扣钱的时候,肯定是从数据库里面操作的,去更新账户表里面的数据,所以咱们先要把数据 ...

  3. 安装配置JDK+Eclipse+Maven、Eclipse里新建Maven Project以及HDFS命令和Java API-课堂内容

    步骤:1.安装JDK→2.安装Eclipse→3.安装Maven→4. Eclipse里配置Maven (下载Windows版本,在Windows里安装使用.) 1.安装配置JDK ①官网下载Java ...

  4. POJ 题目3450 Corporate Identity(KMP 暴力)

    Corporate Identity Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5493   Accepted: 201 ...

  5. vimrc 避免中文乱码配置

    et smsyntax onset ts=4set sts=4set sw=4set hlsearchset rulerset backspace=indent,eol,startset encodi ...

  6. 实现多线程的方式Runnable

    package com.thread.runnable; /** * 实现多线程的方式有继承Thread类和实现Runnable接口两种方式 * 哪种方式更好呢?实现的方式由于继承的方式. * 原因: ...

  7. 二叉查找树python实现

    1. 二叉查找树的定义: 左子树不为空的时候.左子树的结点值小于根节点,右子树不为空时,右子树的结点值大于根节点.左右子树分别为二叉查找树 2. 二叉查找树的最左边的结点即为最小值,要查找最小值.仅仅 ...

  8. Android自己定义圆角ImageView

    我们常常看到一些app中能够显示圆角图片.比方qq的联系人图标等等,实现圆角图片一种办法是直接使用圆角图片资源,当然假设没有圆角图片资源.我们也能够自己通过程序实现的,以下介绍一个自己定义圆角Imag ...

  9. ios开发之自己定义默认生成的导航栏 标题 颜色 返回button

    一 改动导航栏颜色    导航栏在哪个页面代码放在那里面 self.navigationController.navigationBar.tintColor = [UIColor colorWithR ...

  10. 基于bootstrap_后台管理

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...