1

Swift で CocoaLumberjack を使用しようとしています。ポッド「CocoaLumberjack/Swift」の使用

客観的 CI で次のことを行います。

int ddLogLevel = DDLogLevelOff;

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

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

Swiftでは、これを行う方法がわかりません

DDRegisteredDynamicLogging を実装したクラスを作りました

これにより、2つの方法が得られます

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

ただし、 DDLogLevel を設定および取得する場所と方法を宣言する方法はまだ不明です

int ddLogLevel = DDLogLevelOff ;に相当します。

私は試した

static var ddLogLevel: DDLogLevel = defaultDebugLevel
4

3 に答える 3

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 に答える