openresty入门教程:ngx.print ngx.say ngx.log

在OpenResty(一个结合了Nginx和Lua的高性能Web平台)中,ngx.printngx.logngx.say是处理输出、日志记录和响应发送的常用函数。以下是这些函数的详细教程和使用方法:

1. ngx.print

ngx.print用于向客户端发送响应内容。它可以接受多种类型的数据,包括字符串、数字、列表(会被自动连接成字符串)和字典(会被转换成字符串表示)。

使用示例

location /print {content_by_lua_block {ngx.print("Hello, ")ngx.print("OpenResty!\n")ngx.print(123)  -- 数字会被转换成字符串ngx.print({"foo", "bar"})  -- 列表会被连接成"foobar"ngx.print({foo = "bar"})  -- 字典会被转换成类似"foo=bar"的字符串}
}

注意:ngx.print不会自动添加换行符,需要手动添加\n

2. ngx.log

ngx.log用于记录日志。它接受两个主要参数:日志级别和日志消息。日志级别可以是ngx.ERR(错误)、ngx.WARN(警告)、ngx.INFO(信息)、ngx.DEBUG(调试)等。

使用示例

location /log {content_by_lua_block {ngx.log(ngx.INFO, "This is an informational message.")ngx.log(ngx.ERR, "This is an error message.")}
}

日志消息会被记录到Nginx的错误日志中,日志级别决定了消息的严重程度。

3. ngx.say

ngx.sayngx.print的一个便捷封装,它在输出内容后会自动添加一个换行符(\n)。这使得它特别适合于发送HTTP响应,因为HTTP响应通常是以行为单位分隔的。

使用示例

location /say {content_by_lua_block {ngx.say("Hello, World!")ngx.say("This is a new line.")}
}

等价于使用ngx.print并手动添加换行符:

location /say-equivalent {content_by_lua_block {ngx.print("Hello, World!\n")ngx.print("This is a new line.\n")}
}

注意事项

  • 上下文:这些函数只能在Nginx Lua模块支持的上下文中使用,如content_by_lua_blockcontent_by_lua_file等。
  • 性能:频繁记录日志(尤其是高级别日志)可能会影响性能,应谨慎使用。
  • 输出顺序:在发送HTTP头部之后,应避免使用ngx.printngx.say来修改响应体,因为这可能导致错误。
  • 字符编码:当输出非ASCII字符时,应确保正确设置Content-Type响应头和字符集。

通过理解和正确使用这些函数,你可以更有效地处理HTTP请求和响应,并记录必要的日志信息以供后续分析和调试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker部署Oracle 11g

1,拉取镜像: sudo docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11gsudo docker images 2,启动一个临时容器,用于拷贝数据库文件,挂载到宿主主机,使数据持久化: sudo docke…

中安OCR电子行驶证、驾驶证识别,助力便捷出行与智慧交通

随着数字化技术在各行各业的深入应用,交通管理领域也迈入了新的时代。OCR电子行驶证和电子驾驶证的推出,不仅提升了车辆及驾驶证件管理的效率,更大大方便了车主出行。电子证件的普及,使得交通管理从“实体化”逐渐走向“数字化”&…

[CKS] K8S ServiceAccount Set Up

最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于Rolebinding的题目。 Question 1 The buffy Pod in the sunnydale namespace has a buffy-sa ServiceAccount with permissions the Pod doesn’t need. Modify the attached Role so that it onl…

如何找到系统中bert-base-uncased默认安装位置

问题: 服务器中无法连接huggingface,故需要自己将模型文件上传 ubuntu 可以按照这个链接下载 Bert下载和使用(以bert-base-uncased为例) - 会自愈的哈士奇 - 博客园 里面提供了giehub里面的链接 GitHub - google-research/be…

.NET 黑名单上传 突破WAF防护的SoapShell (免杀版)

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

vue项目删除无用的依赖

1.安装依赖检查工具 npm i depcheck2.查看无用的依赖 depcheck3.手动删除pageage.json中的无用的依赖(如果有sass和sass-loader不要删,会引起项目报错) 4.全部删除完成之后,删除package-lock.json文件,删除node_mod…

Vue功能菜单的异步加载、动态渲染

实际的Vue应用中&#xff0c;常常需要提供功能菜单&#xff0c;例如&#xff1a;文件下载、用户注册、数据采集、信息查询等等。每个功能菜单项&#xff0c;对应某个.vue组件。下面的代码&#xff0c;提供了一种独特的异步加载、动态渲染功能菜单的构建方法&#xff1a; <s…

Python 自动化测试应用

Python 自动化测试应用 目录 &#x1f9ea; 自动化测试基础与重要性&#x1f4dd; 使用 pytest、unittest 进行运维脚本和工具的自动化测试&#x1f527; 自动化测试与 CI/CD 集成&#x1f6e0; 测试驱动开发&#xff08;TDD&#xff09;在运维脚本中的应用&#x1f433; 模拟…

成都睿明智科技有限公司抖音电商服务效果如何?

在这个短视频风起云涌的时代&#xff0c;抖音电商以其独特的魅力&#xff0c;成为了众多商家竞相追逐的新蓝海。而在这片波澜壮阔的商海中&#xff0c;成都睿明智科技有限公司犹如一艘稳健的航船&#xff0c;引领着无数企业驶向成功的彼岸。今天&#xff0c;就让我们一起揭开成…

自然语言处理——Hugging Face 详解

Hugging Face 是一个以自然语言处理&#xff08;NLP&#xff09;为核心的人工智能平台和开源社区&#xff0c;提供了一系列非常流行的机器学习工具和预训练模型&#xff0c;尤其在文本生成、分类、翻译、情感分析等任务中表现出色。Hugging Face 旗下最为著名的项目是 Transfor…

SpringBoot基础系列学习(四):Thymeleaf模板

文章目录 一丶什么是模板引擎二丶Thymeleaf 介绍三丶使用引入依赖代码html页面响应 一丶什么是模板引擎 模板引擎是一种将数据和模板结合起来生成最终结果的工具&#xff0c;它将一个模板和一个数据对象作为输入&#xff0c;通过模板解析和渲染生成最终的结果。通俗地说&#…

「QT」几何数据类 之 QRectF 浮点型矩形类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

动手学深度学习-使用d2l导致jupyter内核挂掉

参考如何解决Jupyter Notebook当中有关内核挂掉的问题_挂掉的内核-CSDN博客 在使用d2l库之前加入 import os os.environ["KMP_DUPLICATE_LIB_OK"]"TRUE"

阿里云centos7.9服务器磁盘挂载,切换服务路径

项目背景 1、项目使用的服务器为阿里云centos7.9&#xff0c;默认的磁盘为vda&#xff0c;文件系统挂载在这个磁盘上&#xff0c;项目上使用的文件夹为/home/hnst/uploadPath 2、vda使用率已达到91% 3、现购置一块新的磁盘为vdb&#xff0c;大小为2T 目的 切换服务所使用的…

uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)

一. 创建一个hooks hooks—>useSystemBar.js 二. useSystemBar.js 其中// #ifdef MP-WEIXIN 不是注释 这是uni-app的写法 import {ref} from vue;export default function() {// 获取系统信息let systemInfo ;// #ifdef MP-WEIXINsystemInfo uni.getWindowInfo…

每日科技资讯:2024年11月09日【龙】农历十月初九 ---文末送书

目录 1.史上最强游戏CPU&#xff01;9800X3D首发评测2.苹果喊话iPhone 13和14钉子户&#xff1a;16方方面面都升级了3.加拿大政府下令 TikTok 关闭该国业务&#xff0c;但应用仍可以继续访问4.OpenAI 刚刚花了超过 1000 万美元购买了Chat.com5.Max 加入打击密码共享行列6.微软可…

探索深度学习的本质

深度学习的本质是利用多层&#xff08;深层&#xff09;的神经网络结构来从数据中学习复杂的模式和特征。其主要特点是具有层次结构&#xff0c;能够实现自动特征提取。非线性、可扩展性和迁移学习能力是深度学习能够处理复杂问题和广泛&#xff08;低成本&#xff09;应用的关…

vue3 + vite引入地址路径报错,以及无法点击跳转相应的文件

vue3 vite引入地址路径报错&#xff0c;以及无法点击跳转相应的文件 在项目中找到tsconfig.json&#xff0c;或者jsconfig.json 文件&#xff0c;使用一下代码替换即可。如果两个文件都不存在&#xff0c;如果项目使用了ts&#xff0c;就创建tsconfig.json文件&#xff0c;复…

API接口:助力汽车管理与安全应用

随着汽车行业的飞速发展&#xff0c;越来越多的汽车管理技术被应用到交通安全和智慧交通系统中。在这一过程中&#xff0c;API接口起到了至关重要的作用。通过API接口&#xff0c;我们可以实现诸如车主身份验核、车辆信息查询等功能&#xff0c;从而为汽车智慧交通发展与安全应…

TikTok本土店vs跨境店:解读TikTok小店差异

TikTok小店的两种主要的店铺类型&#xff1a;本土店和跨境店&#xff0c;虽然这两种店铺在功能上有相似之处&#xff0c;但它们在运营模式、市场定位、目标受众和面临的挑战等方面存在显著的区别。 一、定义与基本特征 1. TikTok本土店 本土店指的是在特定国家或地区内经营的…