【问题标题】:HowTo print console output to Both file & console如何将控制台输出打印到文件和控制台
【发布时间】:2021-06-05 11:15:14
【问题描述】:

问题陈述: 我有一个在 Xcode 中运行的程序,带有一堆 print() 语句,可以很好地将输出打印到调试控制台。但是,我还希望能够将这些输出重定向到一个文件,这样我就可以让用户将它们发送给我作为调试的一种方式。

我在 SO 上找到的解决方案使我能够将输出重定向到文件,但调试控制台输出会丢失。

问: 我想要我的蛋糕并吃掉它。我希望能够将 print() 语句重定向到调试控制台和文件。

所以我参考过: https://stackoverflow.com/a/46339657/14414215 https://stackoverflow.com/a/53392944/14414215

【问题讨论】:

  • 你可以使用内置的日志功能,developer.apple.com/documentation/os/logging
  • @JoakimDanielson 我确实看过苹果默认/推荐的日志记录。我的理解是它涉及更多,并且需要用户做更多的事情才能将日志返回给我。 (比如将应用程序连接到 Mac 并导航到某个地方来获取它?)
  • 我不知道,但在重新发明轮子之前,您应该三思而后行。使用日志框架,您可以拥有不同的日志级别并配置您的应用程序使用哪一个,例如,您还可以期待实际日志记录的良好性能等等。
  • @JoakimDanielson 是的。同意。就我而言,我的首要任务是减少让用户向我发送日志的摩擦,我不知道有什么更好的方法来减少这种摩擦。话虽如此,肯定会探索更多。

标签: ios swift debugging


【解决方案1】:

使用问题中的 2 个链接 SO,我设法改变了我的 CSVoutput 函数,如下所示。使用它,我每次都调用该函数。

import Foundation

struct CSVfuncs {

  static func writeLog(_ string: String){
      let filename = "Log_DebugLog.txt"
      let fileURL = FileManager.default.urls(for: .documentDirectory, in: .allDomainsMask).appendingPathComponent(filename)
 
        let data = "\(string)\n"
        
        do {
          print("\(string)")                     // Print to DebugConsole
          try data.appendToURL(fileURL: fileURL) // Redirect to File
        }
        catch {
          print("CSVfuncs writeLog: Could not write data to file")
        }
    }
}

示例:

CVSFuncs.writeLog("this is printed to Debug Console & File")

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 2016-11-28
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2012-06-01
    • 2021-12-13
    相关资源
    最近更新 更多