iOS Cocoalumberjack: ThreadId и ProcessId не печатаются в устройстве регистрации файлов, но печатаются в журналах консоли TTY

#ios #swift #cocoalumberjack

#iOS #swift #cocoalumberjack

Вопрос:

Я создал TestProject в Swift и добавил Cocoalumberjack с помощью CocoaPod. Инициализирован Cocoalumberjack logger для добавления журналов в консоль и файл. Пожалуйста, найдите фрагмент кода инициализатора ниже.

     DDLog.add(DDTTYLogger.sharedInstance, with: DDLogLevel.verbose) // TTY = Xcode console

    let fileLogger: DDFileLogger = DDFileLogger() // File Logger
    fileLogger.rollingFrequency = 60 * 60 * 24 // 24 hours
    fileLogger.logFileManager.maximumNumberOfLogFiles = 7
    DDLog.add(fileLogger)
  

Когда я печатал тестовое сообщение, идентификатор потока и процесса отсутствуют в журналах, добавленных в файл, но присутствующих в консоли.

 DDLogDebug("Test message")
  

Журнал консоли : 2019-03-03 13:28:00:427 Тестовый проект[ 81343:2525521 ] Тестовое сообщение

Журнал файлов : 2019/03/03 13:28:00:427 Тестовое сообщение

Мне нужно, чтобы идентификатор потока и процесса (81343: 2525521) также добавлялись в журналы файлов. Может ли кто-нибудь помочь мне исправить это?

Версия Cocoapod: 1.5.3

Cocoalumberjack: CocoaLumberjack/Swift (3.4.2)

Ответ №1:

Для этого нужен пользовательский формат. Вот пример для ThreadId и метки времени

 class MyCustom: NSObject, DDLogFormatter { 
    func format(message logMessage: DDLogMessage) -> String? { 
       return "(logMessage.threadID) - (logMessage.timestamp)" 
    } 
}
  

Затем добавление в ваш файловый регистратор:
fileLogger.logFormatter = MyCustom()

Комментарии:

1. Спасибо @donmichael. Я удалил level, как вы предложили. Но проблема все еще не решена.

2. Не могли бы вы показать код, как вы регистрируетесь thread id and process id

3. Идентификатор потока и процесс регистрируются Cocoalumberjack. Это код для печати тестового сообщения. «DDLogDebug («Тестовое сообщение»)». Он печатает эти идентификаторы только в консоли, но не в файле.

4.Хорошо, теперь я понял. Для этого нужен пользовательский формат. Вот образец для threadID и timestamp class MyCustom: NSObject, DDLogFormatter { func format(message logMessage: DDLogMessage) -> String? { return "(logMessage.threadID) - (logMessage.timestamp)" } } последующего добавления в ваш file logger: fileLogger.logFormatter = MyCustom()

5. Кстати, здесь вы можете найти всю информацию, относящуюся к сообщению журнала: информация, относящаяся к сообщению журнала, включая: github.com/CocoaLumberjack/CocoaLumberjack/blob/master /…