【问题标题】:CocoaLumberjack - change log file name by subclassing the LogFileManagerCocoaLumberjack - 通过继承 LogFileManager 来更改日志文件名
【发布时间】:2018-05-28 06:50:26
【问题描述】:

我正在尝试更改日志文件名。到目前为止我发现的是this

我的 DDLogFileManagerDefault 子类如下所示:

LogFileManager.h

@import CocoaLumberjack;

// this import would work as well
// #import <CocoaLumberjack/CocoaLumberjack.h> 

// but none of these
//#import "DDLog.h"
//#import "DDTTYLogger.h"
//#import "DDASLLogger.h"
//#import "DDFileLogger.h"

@interface LogFileManager : DDLogFileManagerDefault

@end

LogFileManager.m

#import "LogFileManager.h"

@implementation LogFileManager

- (NSString *)newLogFileName {
    NSBundle *bundle = [NSBundle mainBundle];
    NSDictionary *info = [bundle infoDictionary];
    NSString *appName = [info objectForKey:@"CFBundleExecutable"];

    NSString *timeStamp = [self getTimestamp];

    return [NSString stringWithFormat:@"%@%@.log", appName, timeStamp];
}

- (BOOL)isLogFile:(NSString *)fileName {
    return NO;
}

- (NSString *)getTimestamp {
    static dispatch_once_t onceToken;
    static NSDateFormatter *dateFormatter;
    dispatch_once(&onceToken, ^{
        dateFormatter = [NSDateFormatter new];
        [dateFormatter setDateFormat:@"YYYY.MM.dd-HH.mm.ss"];
    });

    return [dateFormatter stringFromDate:NSDate.date];
}

@end

我就是这样使用它的:

DDLogFileManagerDefault *documentsFileManager = [[LogFileManager alloc] init];    
DDFileLogger *fileLogger = [[DDFileLogger alloc] initWithLogFileManager:documentsFileManager];

当我用 DDLogFileManagerDefault 替换 LogFileManager 时,它工作正常。否则我会得到:

架构 x86_64 的未定义符号:
“_OBJC_CLASS_$_LogFileManager”,引用自: Logger.o ld 中的 objc-class-ref:找不到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码 1(使用 -v 查看调用)

我到底错过了什么? CocoaLumberjack 是通过 Carthage 3.2.0 为 Xcode 8 添加的。 我已经将CocoaLumberjack.framework 添加到构建阶段,就像项目中的所有其他框架一样,/usr/local/bin/carthage copy-frameworks

【问题讨论】:

  • Logger 是什么?
  • Logger 是启动一切的类。 “这就是我使用它的方式”是 Logger.m 的一部分。

标签: objective-c xcode8 carthage cocoalumberjack


【解决方案1】:

好的,我解决了。该错误非常令人困惑,但与任何事情无关。很抱歉。

这是一个大项目,有很多构建目标和很多编译标志,这些标志会让不同的东西抛出警告,警告变成错误。在这种情况下,我添加了标志来禁用提到的 Logger.m 类的全局标志。但我只将这些反标志添加到一个目标而忘记将它们添加到另一个目标。这就是它没有构建的原因。

还是很奇怪,编译器并没有简单地说:无法在文件 B 中构建目标 A 或编译错误。相反,我收到了一条缺失的架构消息,这完全误导了我......非常抱歉给您带来麻烦。修好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    相关资源
    最近更新 更多