XNLogger 3.0.0

XNLogger 3.0.0

Sunil Sharma 维护。




XNLogger 3.0.0

Swift version Pod version Carthage compatible License Pod platforms

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。

截图

网络日志列表 请求详情 响应详情
Log lists Request details Response details
分享 多媒体预览 迷你视图模式(画中画)
Share logs Multimedia preview Mini view mode

需求

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.

限制

  1. 不会记录后台 URL 会话任务。
  2. WKWebView URL 将不会被记录。

尝试在不使用任何私有 API 的情况下记录后台任务和 WKWebView URL。这些限制可能在未来的版本中取消。

贡献

欢迎提交修复任何错误、功能或改进的PR。改完后,请将PR提交到develop分支。

另一种为项目做出贡献的方式是在遇到问题时发送详细的issue。请提供复现步骤和相关信息,例如Swift版本、URL(如果可能的话)、URLSession配置等。

许可

XNLogger在MIT许可下提供。