Создание подсистемы и категории для ведения журнала Cocoa Lumberjack os

В документации Apple говорится, что она предоставляет способ определения категории в подсистеме для фильтрации журналов, специфичных для этой категории ( https://developer.apple.com/documentation/os/1643744-os_log_create?language=objc). Я посмотрел библиотеку Cocoa Lumberjack, но, похоже, нет способа создать подкатегории. Есть ли какие-нибудь альтернативы, которые мы могли бы использовать с библиотекой Cocoa Lumberjack, чтобы добиться того же?

1 ответ

Можно добавить категорию и подсистему, используемые в os_log для Cocoa Lumberjack. Вы можете добавить подсистему и категорию, как в этом примере:

      /// Initialization
for category in LoggerCategory.allCases {
    let logger = DDOSLogger.init(subsystem: "com.yourname", category: category.rawValue)
    logger.logFormatter = CustomLoggingFormatter(category: category)
    DDLog.add(logger)
}

enum LoggerCategory: String, CaseIterable {
    case test
    
    var index: Int {
       return Self.allCases.firstIndex(of: self)!
    }

}

/// Custom logging formatter that filters messages by the category that is provided in the context
class CustomLoggingFormatter: NSObject, DDLogFormatter {

    let category: LoggerCategory
    
    /// Intializer for custom logger that filters out messages with the provided category
    /// - Parameter category: Category that will be filtered (shown for provided category)
    init(category: LoggerCategory) {
        self.category = category
    }
    
    func format(message logMessage: DDLogMessage) -> String? {
        guard logMessage.context == category.index else { return nil }
        
        return "\(logMessage.message)"
    }
}

      // Usage:
DDLogWarn("Your message", context: 1) // context for filter
// Output in console
2020-12-16 16:44:17.899062+0100 App[1234:1234] [test] Your message

Источник, см. Запрос на слияние и обсуждение

Другие вопросы по тегам