" XCGLogger将日志写入"在每个记录的行之前重复

时间:2016-12-15 21:44:46

标签: xcglogger

以前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
}

1 个答案:

答案 0 :(得分:1)

固定!我会告诉你我做错了什么。请参阅底部以获取更正的代码块。

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

let log : XCGLogger {

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

然后我收到编译器的错误,指出:

'let' declarations cannot be computed properties

我想可能在Swift 3.0中发生了一些我不知道的事情,所以我将它从let更改为var并继续,这意味着稍后再回到这个问题。当然,我忘记了。

然后我经历了上面解释的问题,在发布之后,再次浏览了所有内容并意识到每次消息可能发生的唯一方式是每次我记录时都以某种方式进行初始化。 d&#39;哦!现在我想起了关于&#34;计算属性的警告,&#34;最后我意识到每次访问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
}()