1

以前 XCGLogger 对我来说工作得很好,但我决定尝试一些更高级的功能。现在我在 Xcode 的控制台视图中的日志输出填充了:

XCGLogger writing log to: <my logfile name>

它出现在每条记录的消息之前。任何想法为什么?

我对 XCGLogger 的设置:

var log : XCGLogger {
    let log = XCGLogger(identifier: "advancedLogger", includeDefaultDestinations: false)

    let fileDestination = FileDestination(writeToFile: Constants.file.debugging, identifier: "advancedLogger.fileDestination")

    fileDestination.showLogIdentifier = false
    fileDestination.showFunctionName = true
    fileDestination.showThreadName = false
    fileDestination.showLevel = false
    fileDestination.showFileName = true
    fileDestination.showLineNumber = true
    fileDestination.showDate = true

    #if DEBUG

        fileDestination.outputLevel = .verbose

    #else

        fileDestination.outputLevel = .debug

        // don't log on main thread in production
        fileDestination.logQueue = XCGLogger.logQueue

    #endif

    // Add the destination to the logger
    log.add(destination: fileDestination)

    return log
}
4

1 回答 1

1

固定的!我会引导你了解我做错了什么。请参阅底部的更正代码块。

首先,在设置log变量时,我在声明中省略了 = 符号:

let log : XCGLogger {

并忽略了添加()到块的末尾。

然后我收到来自编译器的错误指示:

'let' declarations cannot be computed properties

我想也许 Swift 3.0 中发生了一些我不知道的变化,所以我把它从letto 改为var并继续,意思是稍后再回到这个问题。当然,我忘记了。

然后我遇到了上面解释的问题,在这里发布之后,再次浏览了所有内容,并意识到每次出现该消息的唯一方法是每次登录时都以某种方式对其进行初始化。哦!现在我想起了关于“计算属性”的警告,终于意识到每次访问log变量时我的代码都在运行我所有的日志初始化。

一旦我返回并将=()的声明添加到log,并将其切换回let,一切都按预期工作:

let log : XCGLogger = {
    let log = XCGLogger(identifier: "advancedLogger", includeDefaultDestinations: false)

    let fileDestination = FileDestination(writeToFile: Constants.file.debugging, identifier: "advancedLogger.fileDestination")

    fileDestination.showLogIdentifier = false
    fileDestination.showFunctionName = true
    fileDestination.showThreadName = false
    fileDestination.showLevel = false
    fileDestination.showFileName = true
    fileDestination.showLineNumber = true
    fileDestination.showDate = true

    #if DEBUG

        fileDestination.outputLevel = .verbose

    #else

        fileDestination.outputLevel = .debug

        // don't log on main thread in production
        fileDestination.logQueue = XCGLogger.logQueue

    #endif

    // Add the destination to the logger
    log.add(destination: fileDestination)

    return log
}()
于 2016-12-15T22:03:11.037 回答