Heimdall:为Vapor编写HTTP请求记录器
本文是Heimdall源代码的简要概述,并说明了为Vapor Web Framework编写第三方插件的过程。
去年,一位导师建议我为Vapor Web框架编写一个记录器。 最初,这似乎是一个复杂的任务,但结果再简单不过了。 让我们创建一个插件!
创建一个Swift包
蒸气插件必须是快速软件包,因此可以使用Swift Package Manager导入。 因此,首先需要在终端上运行以下命令来创建一个快速包。
麦克迪尔·海姆达尔
光盘海姆达尔
swift package init --type可执行文件
这将创建以下目录结构。
删除Sources目录中的main.swift文件。 Heimdall只是2个快速文件,而且少于200行代码! 以下是这两个文件的说明,没有实现细节。 如果您想查看所有代码,请参考github repo。
记录仪
HTTP记录器做什么?
它访问有关每个请求和响应的信息,例如状态码,HTTP方法等,并将其写入文件。
您需要创建一个“中间件”,该中间件针对每个请求运行,并将数据简单地写入文件。 以下代码片段显示了没有实现细节的基本中间件。
类记录器:中间件{
var path:字符串=“〜/ Logs / logfile.txt”
//此方法针对每个Web请求运行
公共功能响应(请求:请求,
chainingTo next:Responder)throw-> Response {
//从响应对象访问数据
writeToFile(dataToBeLogged)
}
func writeToFile(path:){
//编写写入文件的快速代码
}
}
记录仪与蒸气项目集成的提供商
现在您有了一个记录器,但是其他开发人员将如何在您的项目中导入您的记录器? 要添加功能或为Vapor创建第三方程序包,您需要创建一个“提供程序”。
提供者提供了一种在Vapor Web App中导入第三方程序包的统一方法。 在此提供程序中,我们初始化Logger类,并将其作为中间件添加到Droplet。
公共最终课程提供者:Vapor.Provider {
公共静态let repositoryName =“ heimdall”
公开让记录器:记录器
公共函数beforeRun(_:Vapor.Droplet){}
公共初始化(格式:LogType,路径:字符串){
logger = Logger(格式:格式,路径:路径)
}
公共功能靴(_ drop:Droplet){}
公共功能启动(_ config:Config)抛出{
//这就是您添加中间件的方式
config.addConfigurable(中间件:记录器,名称:“ heimdall”)
}
}
实现这些文件并将其放在Sources目录中。 就是这样。
将swift包推到Github上,添加一个标签,任何人都可以通过将其添加为依赖项将其导入swift项目中。 在此处阅读详细的安装说明。
PS海姆达尔(PS Heimdall)是阿斯加德(Asgard)的全神贯注的监护哨兵,他站在彩虹桥Bifröst上,观察对阿斯加德(Agard)的袭击。 现在您知道为什么将其称为Heimdall了。 🙂
这家伙。
致谢
我要感谢Santosh Rajan提出的项目建议,Himani对代码库的贡献以及Fabrizio Brancati在我们最需要的时候向我们发送请求请求。 🙂