首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift中的CocoaLumberjack动态日志记录

Swift中的CocoaLumberjack动态日志记录
EN

Stack Overflow用户
提问于 2015-12-02 16:49:23
回答 3查看 2.4K关注 0票数 1

我试图在Swift中使用CocoaLumberjack。使用pod 'CocoaLumberjack/Swift‘

在目标C中,我做了以下工作

代码语言:javascript
运行
复制
int ddLogLevel = DDLogLevelOff;

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

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

在斯威夫特,我不知道怎么做

我创建了一个实现DDRegisteredDynamicLogging的类

这给了我两种方法

代码语言:javascript
运行
复制
static func ddLogLevel() -> DDLogLevel {
}
static func ddSetLogLevel(level: DDLogLevel) {
}

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

等价于int ddLogLevel = DDLogLevelOff

我试过了

代码语言:javascript
运行
复制
static var ddLogLevel: DDLogLevel = defaultDebugLevel
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-09 20:39:30

这并不理想,但我已经将其用于CocoaLumberjack 2.2.0,如下所示:

  • 将下列内容添加到您的课堂上: 静态变量ddLogLevel: DDLogLevel = .Off静态函数ddSetLogLevel( level : DDLogLevel) { ddLogLevel =level} 这将确保CocoaLumberjack将您的类标识为为日志记录目的注册的类,并使您能够在运行时更改其日志记录级别。
  • 在伐木时,请使用。 DDLogWarn(“危险,威尔罗宾逊”,等级: self.dynamicType.ddLogLevel) level参数至关重要。没有它,消息将始终被记录下来。

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

票数 1
EN

Stack Overflow用户

发布于 2020-07-18 23:39:10

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

代码语言:javascript
运行
复制
dynamicLogLevel = .info
票数 3
EN

Stack Overflow用户

发布于 2016-03-23 15:38:38

在这个讨论中还有另一个解决方案。它对我来说是暂时的,我正在试验它。

您必须通过定义UnitDDLoggable来采用

代码语言:javascript
运行
复制
  var logPrefix = ""
  var logLevel = DDLogLevel.Debug

它允许一个人简单地写:

代码语言:javascript
运行
复制
DDLogWarn("Danger, Will Robinson"

“迅捷2.3”的代码:

代码语言:javascript
运行
复制
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())
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34048338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档