HTTP 请求的日志记录

如果希望把HTTP请求写入日志文件,请使用Perfect-RequestLogger 函数库

相关范例

使用方法

请在您的项目文件 Package.swift 中增加以下依存关系:

.Package(url: "https://github.com/PerfectlySoft/Perfect-RequestLogger.git", majorVersion: 3)

对于要调用该功能的源程序,请在源程序文件开头增加导入语句:

import PerfectRequestLogger

对于 PerfectHTTP 2.1 以上版本

在您服务器 main.swift 增加下列内容

// 初始化日志记录器
let httplogger = RequestLogger()

// 配置服务器
var confData: [String:[[String:Any]]] = [
    "servers": [
        [
            "name":"localhost",
            "port":8181,
            "routes":[],
            "filters":[
                [
                    "type":"response",
                    "priority":"high",
                    "name":PerfectHTTPServer.HTTPFilter.contentCompression,
                    ],
                [
                    "type":"request",
                    "priority":"high",
                    "name":RequestLogger.filterAPIRequest,
                    ],
                [
                    "type":"response",
                    "priority":"low",
                    "name":RequestLogger.filterAPIResponse,
                    ]
            ]
        ]
    ]
]

其中配置关键在于增加下列过滤器:

[
    "type":"request",
    "priority":"high",
    "name":RequestLogger.filterAPIRequest,
],
[
    "type":"response",
    "priority":"low",
    "name":RequestLogger.filterAPIResponse,
]

这些请求/响应过滤器能够用于触发HTTP访问时记录日志。

如果使用 PerfectHTTP 2.0 版本服务器

在您服务器 main.swift 增加下列内容

// 初始化日志记录器
let httplogger = RequestLogger()

// 增加过滤器
// 请求过滤器,高优先触发
server.setRequestFilters([(httplogger, .high)])
// 响应过滤器,最后一个触发
server.setResponseFilters([(httplogger, .low)])

这些请求/响应过滤器能够用于触发HTTP访问时记录日志。

设置日志文件的存储位置

默认的服务器日志文件路径为/var/log/perfectLog.log。您可以通过在主程序main.swift中设置属性 RequestLogFile.location:

RequestLogFile.location = "/var/log/myLog.log"

输出效果:

[INFO] [62f940aa-f204-43ed-9934-166896eda21c] [servername/WuAyNIIU-1] 2016-10-07 21:49:04 +0000 "GET /one HTTP/1.1" from 127.0.0.1 - 200 64B in 0.000436007976531982s
[INFO] [ec6a9ca5-00b1-4656-9e4c-ddecae8dde02] [servername/WuAyNIIU-2] 2016-10-07 21:49:06 +0000 "GET /two HTTP/1.1" from 127.0.0.1 - 200 64B in 0.000207006931304932s

该模块是在大卫·弗莱明的工作基础之上完成:David Fleming.