Динамическое ведение журнала CocoaLumberjack в Swift

Я пытаюсь использовать CocoaLumberjack в Swift. Использование модуля «CocoaLumberjack/Swift»

В задаче C я делаю следующее

int ddLogLevel = DDLogLevelOff;

@implementation CLDDLoglevel
+ (int)ddLogLevel
{
    return ddLogLevel;
}

+ (void)setLogLevel:(int)logLevel
{
    ddLogLevel = logLevel;
}

В Swift я не понимаю, как это сделать

Я сделал класс, реализующий DDRegisteredDynamicLogging.

Это дает мне два метода

static func ddLogLevel() -> DDLogLevel {
}
static func ddSetLogLevel(level: DDLogLevel) {
}

Однако мне все еще неясно, где и как объявить DDLogLevel для установки и получения

Эквивалент int ddLogLevel = DDLogLevelOff;

Я старался

static var ddLogLevel: DDLogLevel = defaultDebugLevel

person Ryan Heitner    schedule 02.12.2015    source источник


Ответы (3)


Это не идеально, но я заставил это работать для CocoaLumberjack 2.2.0 следующим образом:

  • Добавьте в свой класс следующее:

    static var ddLogLevel: DDLogLevel = .Off
    
    static func ddSetLogLevel(level: DDLogLevel) {
        ddLogLevel = level
    }
    

    Это гарантирует, что CocoaLumberjack идентифицирует ваш класс как зарегистрированный для целей ведения журнала и позволит вам изменить его уровень ведения журнала во время выполнения.

  • При регистрации используйте, например.

    DDLogWarn("Danger, Will Robinson", level: self.dynamicType.ddLogLevel)
    

    Параметр level имеет решающее значение. Без него сообщение всегда будет логироваться.

Я надеюсь, что поддержка Swift в CocoaLumberjack созреет и устранит эти камни преткновения. А пока удачной регистрации!

person acj    schedule 09.12.2015

Для тех, кто все еще ищет простой способ динамического изменения уровней ведения журнала в Swift, просто используйте dynamicLogLevel в любое время. Например:

dynamicLogLevel = .info
person Gary Hooper    schedule 18.07.2020

Другое решение доступно в этом обсуждении . Это работает для меня на данный момент, и я экспериментирую с этим.

Вы должны принять UnitDDLoggable, определив

  var logPrefix = ""
  var logLevel = DDLogLevel.Debug

Это позволяет просто написать:

DDLogWarn("Danger, Will Robinson"

Код для быстрой версии 2.3:

import CocoaLumberjackSwift

/// Base protocol for unit specific logging. Generally you won't implement this protocol directly, you will
/// implement one of the protocols that inherit from it
protocol UnitLoggable {
    /// Prefix to append to each log line, should include a trailing space to separate it from the log message
    var logPrefix:String { get }
}

/// Implment this protocol to use CocoaLumberjack logging with the level controlable at the file level
protocol UnitDDLoggable : UnitLoggable {
    /// Lumberjack log level to use for this code unit, Lumberjack log calls in this unit will use this level
    /// not the default log level, to use the shared lumberjack level this property should return defaultDebugLevel
    var logLevel:DDLogLevel { get }
}

extension UnitDDLoggable {
    final func DDLogDebug(@autoclosure logText: () -> String, context: Int = 0, file: StaticString = #file, function: StaticString = #function, line: UInt = #line, tag: AnyObject? = nil, asynchronous async: Bool = true) {
        SwiftLogMacro(async, level: logLevel, flag: .Debug, context: context, file: file, function: function, line: line, tag: tag, string: logPrefix + logText())
    }

    final func DDLogInfo(@autoclosure logText: () -> String, context: Int = 0, file: StaticString = #file, function: StaticString = #function, line: UInt = #line, tag: AnyObject? = nil, asynchronous async: Bool = true) {
        SwiftLogMacro(async, level: logLevel, flag: .Info, context: context, file: file, function: function, line: line, tag: tag, string: logPrefix + logText())
    }

    final func DDLogWarn(@autoclosure logText: () -> String, context: Int = 0, file: StaticString = #file, function: StaticString = #function, line: UInt = #line, tag: AnyObject? = nil, asynchronous async: Bool = true) {
        SwiftLogMacro(async, level: logLevel, flag: .Warning, context: context, file: file, function: function, line: line, tag: tag, string: logPrefix + logText())
    }

    final func DDLogVerbose(@autoclosure logText: () -> String, context: Int = 0, file: StaticString = #file, function: StaticString = #function, line: UInt = #line, tag: AnyObject? = nil, asynchronous async: Bool = true) {
        SwiftLogMacro(async, level: logLevel, flag: .Verbose, context: context, file: file, function: function, line: line, tag: tag, string: logPrefix + logText())
    }

    final func DDLogError(@autoclosure logText: () -> String,context: Int = 0, file: StaticString = #file, function: StaticString = #function, line: UInt = #line, tag: AnyObject? = nil, asynchronous async: Bool = false) {
        SwiftLogMacro(async, level: logLevel, flag: .Error, context: context, file: file, function: function, line: line, tag: tag, string: logPrefix + logText())
    }
}
person Adrian    schedule 23.03.2016