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在我们最需要的时候向我们发送请求请求。 🙂

Interesting Posts