CocoaLumberjack со Свифт-вызовом макросов препроцессора
Я начал создавать приложение IOS с новым языком программирования Swift. Мне удалось использовать CocoaPods и удалось успешно создать DDTTYLogger с помощью моего CustomLoggerFormatter (Objective-C) в моем AppDelegate.swift и добавьте его к лесорубам.
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? Или кто-нибудь пробовал нечто подобное с большим успехом?
3 ответов
хорошо, я только что нашел решение. Написание класса-оболочки Objective-C, вызывающего препроцессоры и предлагающего методы для его вызова.
надеюсь, это поможет другим людям, сталкивающимся с теми же проблемами.
Я сначала создал файл заголовка:
@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 -.H файл, а затем вы можете создать экземпляр в Swift DDLogWrapper и вызовите методы logVerbose, logError, logInfo.
.
со следующим кодом я смог сделать оператор журнала:
DDLogWrapper.logVerbose("TEST");
Я создал Swift обертка для CocoaLumberjack это хорошо инкапсулирует все.
DDLog.addLogger(DDTTYLogger.sharedInstance())
DDLog.logLevel = .Info
logInfo("Info")
logWarn("Warn")
logDebug("Debug")
logError("Error")
по состоянию на 2.0.0beta4
, CocoaLumberJack включает в себя CocoaLumberJack.swift
файл, который делает его интеграцию с проектами Swift очень легко.
они используют глобальный var defaultDebugLevel
установить DDLogLevel
, и вы можете swift basic precompile макросы, чтобы настроить его для ваших нужд.
#if DEBUG
defaultDebugLevel = DDLogLevel.All
#else
defaultDebugLevel = DDLogLevel.Warning
#endif
DDLog.addLogger(DDTTYLogger.sharedInstance())
DDLogDebug("Debug")
DDLogInfo("Info")
DDLogWarn("Warning")
DDLogVerbose("Verbose")
DDLogError("Error")