Вручную создайте новый файл журнала с CocoaLumberjack

Я настроил CocoaLumberjack следующим образом:

// CocoaLumberjack
DDLog.add(DDASLLogger.sharedInstance, with: DDLogLevel.debug)
DDLog.add(DDTTYLogger.sharedInstance, with: DDLogLevel.debug)
DDTTYLogger.sharedInstance.colorsEnabled = true
fileLogger = DDFileLogger.init()
fileLogger?.doNotReuseLogFiles = true // Always create a new log file when apps starts
fileLogger?.rollingFrequency = 86400 // 24 Hours
fileLogger?.maximumFileSize = 0 // Force log to only roll after 24 hours
fileLogger?.logFileManager.maximumNumberOfLogFiles = 1 // Keeps 1 log file plus active log file
DDLog.add(fileLogger!, with: DDLogLevel.debug)

В моем приложении я хочу иметь следующую систему журналов:

Точкой входа в мое приложение является контроллер вида входа в систему. Я хочу написать записи в журнале, чтобы увидеть, все ли в порядке. Если пользователь входит в систему правильно, я хочу свернуть / архивировать этот журнал и создать новый для этого пользователя. В этом новом журнале я буду хранить ошибки, возникающие во время сеанса пользователя. Если пользователи выходят из системы, я хочу снова свернуть / заархивировать журнал и создать новый. Перед свертыванием / архивированием журнала я всегда отправляю его на свой сервер, чтобы удалить его с устройства.

Я пытаюсь следующее, чтобы накатить / архивировать журнал, но у меня ничего не получается:

Server().sendUserLog(filePath: DDFileLogger().currentLogFileInfo.filePath, onSuccess: { // This function send the log to the server, if all goes good, I want to roll it. 
          print(">>>>>>>>>>>>>>>>>>>>> \(DDFileLogger().currentLogFileInfo.filePath)")
          DDFileLogger().rollLogFile(withCompletion: { 
            print("Log rolled")
            print(">>>>>>>>>>>>>>>>>>>>> \(DDFileLogger().currentLogFileInfo.filePath)")
          })
        }, onError: { (error) in
          DDLogError("LoginVC - sendUserLog Error: \(error)")
        })

Как печать, до функции прокрутки, так и после функции прокрутки распечатывает один и тот же путь и имя файла. Так что я не создаю новый файл журнала.

Как я могу создать это?

1 ответ

Решение

Проблема в том, что вы создаете новый DDFileLogger используя DDFileLogger(), Вы должны где-то хранить свой fileLogger и вызывать rollLogFile в том же экземпляре. Что-то вроде этого:

let fileLogger = DDFileLogger()
Server().sendUserLog(
    filePath: fileLogger.currentLogFileInfo.filePath, 
    onSuccess: { // This function send the log to the server, if all goes good, I want to roll it. 
        print(">>>>>>>>>>>>>>>>>>>>> \(fileLogger.currentLogFileInfo.filePath)")
        fileLogger.rollLogFile(withCompletion: { 
            print("Log rolled")
            print(">>>>>>>>>>>>>>>>>>>>> \(fileLogger.currentLogFileInfo.filePath)")
        })
    }, 
    onError: { (error) in
      DDLogError("LoginVC - sendUserLog Error: \(error)")
    })
Другие вопросы по тегам