在 swift 项目中集成 LogglyLogger-CocoaLumberjack

Integrating LogglyLogger-CocoaLumberjack in swift project

提问人:Qadir Hussain 提问时间:10/15/2020 最后编辑:oguz ismailQadir Hussain 更新时间:6/13/2021 访问量:230

问:

我正在尝试在我的 swift 项目中使用 LogglyLogger-CocoaLumberjack

我在 xCode 中收到此错误。

Enum case 'verbose' has no associated values

我无法解决这个问题。

https://prnt.sc/uznr01

我实际上正在尝试在 swift 5 中翻译 Objective-C 代码。这是我的 swift 函数

在 appDelegate.swift 类中

func initLoggly(){
        

        //      static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
                let ddLogLevel:DDLogLevel = .verbose
                
        //      LogglyLogger *logglyLogger = [[LogglyLogger alloc] init];
                let logglyLogger = LogglyLogger()
        
        //      [logglyLogger setLogFormatter:[[LogglyFormatter alloc] init]];
                logglyLogger.logFormatter = LogglyFormatter()
        
        //      logglyLogger.logglyKey = @"your-loggly-api-key";
                logglyLogger.logglyKey = "XXXXXXXXXXXX-XXXXXX"
                
        //
        //        // Set posting interval every 15 seconds, just for testing this out, but the default value of 600 seconds is better in apps
        //        // that normally don't access the network very often. When the user suspends the app, the logs will always be posted.
        //      logglyLogger.saveInterval = 15;
                logglyLogger.saveInterval = 15
        
        //      [DDLog addLogger:logglyLogger];
                DDLog.add(logglyLogger)
                
        //        // Do some logging
        //      DDLogVerbose(@"{\"myJsonKey\":\"some verbose json value\"}");
        //     ddLogLevel.verbose("{\"initloggly\":\"some verbose json value\"}") // also tried this, error ==> Enum case 'verbose' cannot be used as an instance member
                DDLogLevel.verbose("{\"initloggly\":\"some verbose json value\"}") // Here is the error on this line

    }

请指出我做错了什么!

ios swift loggly cocoalumberjack

评论


答:

2赞 Gereon 10/15/2020 #1

该库主要基于 C 预处理器宏,无法从 Swift 访问。

您可能需要在 Objective-C 中编写一小组包装函数,这些函数使用这些宏,并且又可以从 Swift 调用。

下面是其外观的示例:

LogglyWrapper.h:

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN
@interface LogglyWrapper : NSObject
+(void) logVerbose:(NSString*) msg;
@end
NS_ASSUME_NONNULL_END

和 LogglyWrapper.m:

#import "LogglyWrapper.h"
#import <LogglyLogger.h>

@implementation LogglyWrapper
static const DDLogLevel ddLogLevel = DDLogLevelVerbose;

+(void) logVerbose:(NSString*) msg {
    DDLogVerbose(@"%@", msg);
}
@end

来自 Swift 的用法:

LogglyWrapper.logVerbose("foo")

评论

0赞 Qadir Hussain 10/15/2020
感谢您的指导,您能否提供一些链接,如何根据此库制作一个包装器函数。
0赞 Qadir Hussain 10/15/2020
感谢您的代码片段。我现在遇到了这个问题 prnt.sc/uzw269 使用未声明的标识符“LOG_ASYNC_ENABLED” 使用未声明的标识符“LOG_LEVEL_DEF”
0赞 Sivakumar Punniyakotti 5/10/2022
@QadirHussain,将 pod 更新为 pod “LogglyLogger-CocoaLumberjack”, “~> 3.0”