1

我正在尝试在 Swift 中使用 CocoaLumberjack。使用 pod 'CocoaLumberjack/Swift'

在客观 CI 中执行以下操作

int ddLogLevel = DDLogLevelOff;

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

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

在斯威夫特我不明白如何做到这一点

我做了一个实现 DDRegisteredDynamicLogging 的类

这给了我两种方法

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

但是我仍然不清楚在哪里以及如何声明 DDLogLevel 来设置和获取

相当于int ddLogLevel = DDLogLevelOff ;

我试过了

static var ddLogLevel: DDLogLevel = defaultDebugLevel
4

3 回答 3

3

对于那些仍在寻找一种在 Swift 中动态更改日志记录级别的简单方法的人,只需dynamicLogLevel随时使用。例如:

dynamicLogLevel = .info
于 2020-07-18T23:39:10.453 回答
1

此讨论中提供了另一种解决方案。它目前对我有用,我正在试验它。

您必须UnitDDLoggable通过定义来采用

  var logPrefix = ""
  var logLevel = DDLogLevel.Debug

它允许人们简单地写:

DDLogWarn("Danger, Will Robinson"

swift 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())
    }
}
于 2016-03-23T15:38:38.553 回答
1

这并不理想,但我已经让它适用于 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参数很关键。没有它,消息将始终被记录。

我希望 CocoaLumberjack 的 Swift 支持将成熟并消除这些绊脚石。在那之前,快乐的伐木!

于 2015-12-09T20:39:30.543 回答