XNLogger 是一个网络日志框架,可以轻松扩展和修改以满足需求。它可以格式化为仅记录 URL 或完整网络流量详情。它提供了用于调试和测试的应用内日志 UI。日志可以写入文件、在 Xcode 控制台上打印、发送到网络或使用内置日志 UI。网络日志 UI 在设备和模拟器上通过摇晃手势出现在应用中。
网络日志器在启用二进制数据(如图像、视频等)记录时可以生成大量数据,这可能会增加内存使用并导致应用崩溃。为了避免这种情况,XNLogger 被设计为高效地使用内存,它将日志写入磁盘并且仅在需要时加载到内存中。
特性
- 记录所有网络流量。
- 可以通过按下
CTRL + X
或通过摇晃手势在应用内查看网络日志。 - 迷你视图模式,使调试更轻松。迷你视图可以调整大小并在屏幕上移动。
- 可以通过电子邮件、AirDrop 或复制到剪贴板来共享网络日志。
- 在模拟器上运行应用时,可以将日志文件保存到桌面或任何其他位置。
- 内存高效,日志写入到磁盘以减少内存压力。
- 支持对方案(http, https)、主机(如 www.example.com)、包含(URL 中的任何字符串)等进行筛选。
- 支持多个日志写入器/处理器的组合(例如,控制台、文件等),可以同时使用多个处理器。
- 支持自定义日志处理器。
- 可以为每个日志处理器添加单独的过滤器。
- 可以完全跳过 XNLogger 或跳过特定日志处理器的某些 URL。
- 可以动态添加或删除过滤器和日志处理器。
- 日志格式化器可以仅记录所需的数据。
- Swift & Objective-C 兼容性。
- 与外部库(如 Alamofire & AFNetworking)一起工作。
- 支持 iPhone 和 iPad。
截图
网络日志列表 | 请求详情 | 响应详情 |
---|---|---|
![]() |
![]() |
![]() |
分享 | 多媒体预览 | 迷你视图模式(画中画) |
![]() |
![]() |
![]() |
需求
iOS 12.0 或更高版本
安装
CocoaPods
pod 'XNLogger'
仅针对 debug
配置集成到项目中
pod 'XNLogger', :configurations => ['Debug']
Carthage
github "https://github.com/sunilsharma08/XNLogger"
手动操作
将文件夹“XNLogger”和源文件拖动到您的项目中。
- 请从“XNLogger”文件夹中删除名为“Info.plist”的文件,否则可能会因此出现错误。
- 转到文件“XNLoader.m”,并将导入语句从
"XNLogger/XNLogger-Swift.h"
更改为<Your-app-target-name>-Swift.h
。例如,如果您的应用程序目标名称是AwesomeApp,则导入语句将为
#import "AwesomeApp-Swift.h"
有关如何在Objective-C文件中桥接Swift代码的更多详细信息,请参阅此Apple文档 - 将Swift导入到Objective-C
用法
项目集成后将自动开始记录日志。按CTRL + X
或摇晃设备/模拟器(设备 -> 摇晃)以在应用程序中查看日志。
手动开始记录
XNLogger.shared.startLogging()
停止记录
XNLogger.shared.stopLogging()
要仅在调试配置中使用记录器,请将记录器代码包裹在预处理宏 #if DEBUG
中,如下所示
#if DEBUG
XNLogger.shared.startLogging()
#endif
显示XNLogger UI
XNUIManager.shared.presentUI()
隐藏XNLogger UI
XNUIManager.shared.dismissUI()
清除日志
XNUIManager.shared.clearLogs()
添加预定义日志处理器
控制台处理器
let consoleLogHandler = XNConsoleLogHandler.create()
XNLogger.shared.addLogHandlers([consoleLogHandler])
文件处理程序
let fileLogHandler = XNFileLogHandler.create() //Default file name 'XNNetworkLog'
// File log handler can be created with filename
let fileLogHandler = XNFileLogHandler.create(fileName: "AppNetworkLogs")
XNLogger.shared.addLogHandlers([fileLogHandler])
移除日志处理程序
XNLogger.shared.removeHandlers([consoleLogHandler])
过滤器
过滤器可以应用于日志记录器和处理程序。添加到日志记录器的过滤器将适用于所有处理程序,而不会通过 XNLogger 的请求,而添加到处理程序的过滤器将被记录但仅记录到适用处理程序。添加到单个处理程序的过滤器不适用于其他处理程序。当需要跳过所有处理程序或想要记录/跳过某些特定 URL 时,添加过滤器的日志记录器是有用的。
向日志记录器添加过滤器(通用过滤器)
let httpScheme = XNSchemeFilter(scheme: "https")
XNLogger.shared.addFilters([httpScheme])
从日志记录器移除过滤器(通用过滤器)
XNLogger.shared.removeFilters([httpScheme])
向处理器添加过滤器
let host = XNHostFilter(host: "www.example.com")
consoleHandler.addFilters([host])
从处理器移除过滤器
consoleHandler.removeFilters([host])
任何过滤器都可以反转,假设所有 http
方案 URL 都不应出现在日志中,只需将过滤器属性 invert
更新为 true
即可
let httpScheme = XNSchemeFilter(scheme: "https")
httpScheme.invert = true
格式化器
默认情况下,记录器记录所有信息(除二进制数据外)。这些设置可以根据需求进行调整。格式化器允许控制记录哪些字段以及跳过哪些。格式化器类 XNLogFormatter
有以下属性
public var showRequest: Bool = true // Hide or show requests log.
public var showResponse: Bool = true // Hide or show response log.
public var showReqstWithResp: Bool = false // Show request with response, useful when `showRequest` is disabled.
public var showCurlWithReqst: Bool = true // Show curl request with request log.
public var showCurlWithResp: Bool = true // Show curl request when url request is displayed with response.
public var prettyPrintJSON: Bool = true // Log pretty printed json data .
public var logUnreadableRespBody: Bool = false // Show binary data like image, video, etc in response.
public var logUnreadableReqstBody: Bool = false // Show binary data like image, video, etc in request body.
public var showReqstMetaInfo: [XNRequestMetaInfo] = XNRequestMetaInfo.allCases // Details to be displayed in request log portion.
public var showRespMetaInfo: [XNResponseMetaInfo] = XNResponseMetaInfo.allCases // Details to be displayed in response log portion.
public var showReqstMetaInfoWithResp: [XNRequestMetaInfo] = XNRequestMetaInfo.allCases // Details to display for request when display as response portion.
限制
- 不会记录后台 URL 会话任务。
- WKWebView URL 将不会被记录。
尝试在不使用任何私有 API 的情况下记录后台任务和 WKWebView URL。这些限制可能在未来的版本中取消。
贡献
欢迎提交修复任何错误、功能或改进的PR。改完后,请将PR提交到develop分支。
另一种为项目做出贡献的方式是在遇到问题时发送详细的issue。请提供复现步骤和相关信息,例如Swift版本、URL(如果可能的话)、URLSession配置等。
许可
XNLogger在MIT许可下提供。