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

How to silence debug logging with Alamofire (or NSUrlSession)?

Xcode 12.2, 阿拉莫火 5.4.0, Swift5


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

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.

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

中过滤这些内容

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

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