我开始使用新的编程语言Swift构建一个IOS应用程序。我设法使用CocoaPods并且能够在我的AppDelegate.swift中使用我的CustomLoggerFormatter(Objective-C)成功创建DDTTYLogger并将其附加到记录器。
var customLoggerFormatter = CustomLoggerFormatter()
var consoleLogger: DDTTYLogger = DDTTYLogger.sharedInstance()
consoleLogger.setLogFormatter(customLoggerFormatter)
DDLog.addLogger(consoleLogger)
但问题是,CocoaLumberjack库正在使用预处理器宏来处理记录器方法,例如DDLogVerbose(@"..")
在DDLog.h中定义:
#define DDLogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, LOG_LEVEL_DEF, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__)
是否有任何解决方法使预处理器定义在Swift中工作?或者有没有人尝试类似的东西并取得更大的成功?
答案 0 :(得分:12)
好的,我刚刚找到了解决方案。编写一个Objective-C Wrapper类,调用预处理器并提供调用它的方法。
希望这有助于其他人面临同样的问题。
我首先创建了一个头文件:
@interface DDLogWrapper : NSObject
+ (void) logVerbose:(NSString *)message;
+ (void) logError:(NSString *)message;
+ (void) logInfo:(NSString *)message;
@end
使用相应的实现:
#import <Foundation/Foundation.h>
#import "DDLogWrapper.h"
// Logging Framework Lumberjack
#import "DDLog.h"
#import "DDASLLogger.h"
#import "DDTTYLogger.h"
// Definition of the current log level
#ifdef DEBUG
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
static const int ddLogLevel = LOG_LEVEL_ERROR;
#endif
@implementation DDLogWrapper
+ (void) logVerbose:(NSString *)message {
DDLogVerbose(message);
}
+ (void) logError:(NSString *)message {
DDLogError(message);
}
+ (void) logInfo:(NSString *)message {
DDLogInfo(message);
}
@end
重要的是将DDLogWrapper.h文件添加到ProjectName-Bridging-Header.h文件中,然后您可以在Swift中实例化DDLogWrapper并调用方法logVerbose, logError, logInfo.
。
使用以下代码,我能够创建一个日志语句:
DDLogWrapper.logVerbose("TEST");
答案 1 :(得分:5)
我创建了一个Swift wrapper for CocoaLumberjack,它很好地封装了所有内容。
DDLog.addLogger(DDTTYLogger.sharedInstance())
DDLog.logLevel = .Info
logInfo("Info")
logWarn("Warn")
logDebug("Debug")
logError("Error")
答案 2 :(得分:4)
从2.0.0beta4
开始,CocoaLumberJack包含一个CocoaLumberJack.swift
文件,可以很容易地与Swift项目集成。
他们使用全局变量defaultDebugLevel
来设置DDLogLevel
,您可以快速移动基本的预编译宏来根据需要对其进行自定义。
#if DEBUG
defaultDebugLevel = DDLogLevel.All
#else
defaultDebugLevel = DDLogLevel.Warning
#endif
DDLog.addLogger(DDTTYLogger.sharedInstance())
DDLogDebug("Debug")
DDLogInfo("Info")
DDLogWarn("Warning")
DDLogVerbose("Verbose")
DDLogError("Error")