如何使用 Alamofire(或 NSUrlSession)使调试日志静音?

Posted

技术标签:

【中文标题】如何使用 Alamofire(或 NSUrlSession)使调试日志静音?【英文标题】:How to silence debug logging with Alamofire (or NSUrlSession)? 【发布时间】:2020-11-20 19:45:40 【问题描述】:

Xcode 12.2, Alamofire 5.4.0, 斯威夫特 5


我有这个 sn-p 的代码来从后端请求数据,它在快乐的流程中运行良好。 但是,如果由于某种原因后端无法访问,我会看到自动生成的日志记录,我希望它隐藏或静音。因为当我分析调试日志时这让我感到不安。

let request = AF.request("http://192.168.1.5:44444/api/users", headers: headers)
        request.responseJSON  (data) in
    
            switch data.result 
                case .success:
                    print("Request Succes!")
                case .failure(let errorData):
                    print("Request Failed")
                    print("\(errorData.errorDescription ?? "")")
            
        

错误输出:

Task <xxxxxxxx>.<1> HTTP load failed, 0/0 bytes (error code: -1004 [1:61])
Task <xxxxxxxx>.<1> finished with error [-1004] Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo=_kCFStreamErrorCodeKey=61, NSUnderlyingError=0x600000d82250 Error Domain=kCFErrorDomainCFNetwork Code=-1004 "(null)" UserInfo=_kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <xxxxxxxxx>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <xxxxxxxxx>.<1>"
), NSLocalizedDescription=Could not connect to the server., NSErrorFailingURLStringKey=http://192.168.1.5:44444/developer, NSErrorFailingURLKey=http://192.168.1.5:44444/developer, _kCFStreamErrorDomainKey=1
Request Failed
URLSessionTask failed with error: Could not connect to the server.

我想摆脱以下不是我生成的:

Task <xxxxxxxx>.<1> HTTP load failed, 0/0 bytes (error code: -1004 [1:61])
Task <xxxxxxxx>.<1> finished with error [-1004] Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo=_kCFStreamErrorCodeKey=61, NSUnderlyingError=0x600000d82250 Error Domain=kCFErrorDomainCFNetwork Code=-1004 "(null)" UserInfo=_kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <xxxxxxxxx>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <xxxxxxxxx>.<1>"
), NSLocalizedDescription=Could not connect to the server., NSErrorFailingURLStringKey=http://192.168.1.5:44444/developer, NSErrorFailingURLKey=http://192.168.1.5:44444/developer, _kCFStreamErrorDomainKey=1

只看:

Request Failed
URLSessionTask failed with error: Could not connect to the server.

【问题讨论】:

【参考方案1】:

这些是操作系统生成的系统日志,而不是 Alamofire。虽然您可以通过禁用 os 子系统来使它们静音,但我不推荐这样做,因为这会禁用您的应用程序中的所有 os_logs 和其他 os 模块功能,例如路标。使用反馈助手向 Apple 提出功能请求最终可能会说服他们让我们在 Xcode 中过滤这些功能。

【讨论】:

XCode中这个过滤器确实存在,请看我的回答。 问题是关于过滤系统噪音。您可以为自己的前缀添加过滤器,但每次使用调试器或想要查看您无法控制的依赖项的日志记录时都必须将其关闭。【参考方案2】:

我遇到了完全相同的问题,我只想要我创建的调试条目,而不是系统创建的调试条目。我使用我自己的所有日志条目的前缀解决了这个问题。例如“[sync] 正在从服务器同步...”或“[sync] 无法连接到服务器。”。

现在您可以将 XCode 中的过滤器(在日志窗格的底部)设置为前缀“[sync]”,并且您只能看到您自己的条目。这甚至在运行应用程序和日志时也有效!

【讨论】:

以上是关于如何使用 Alamofire(或 NSUrlSession)使调试日志静音?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire.upload 函数上传带有一些参数的图片或 wav 文件

如何在 Alamofire 获取请求中调用包含变量或常量的结构到字典中

如何使用 RxAlamofire 或 Alamofire 5 及更高版本检查相同的 DataRequest 是不是已经在进行中? [关闭]

如何检查网络响应来自 Alamofire 请求中的缓存或服务器?

AlamoFire:如何获取 responseJSON 值

如何使用 AlamoFire 下载 blob URI