代码之家  ›  专栏  ›  技术社区  ›  ecth

CocoaLumberjack-通过子类化LogFileManager更改日志文件名

  •  0
  • ecth  · 技术社区  · 7 年前

    我正在尝试更改日志文件名。到目前为止我发现 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];
    

    当我更换时 LogFileManager 具有 DDLogFileManagerDefault 它工作得很好。否则我会得到:

    体系结构x86\u 64的未定义符号:
    “\u OBJC\u CLASS\u$\ u LogFileManager”,引用自: 记录器中的objc类参考。o ld:找不到架构x86\u 64的符号clang:错误:链接器命令失败,返回退出代码 1(使用-v查看调用)

    我到底错过了什么? CocoaLumberjack是通过Carthage 3.2.0为Xcode 8添加的。 我添加了 CocoaLumberjack.framework 与项目中的所有其他框架一样 /usr/local/bin/carthage copy-frameworks

    1 回复  |  直到 4 年前
        1
  •  0
  •   ecth    7 年前

    好吧,我解决了。这个错误非常令人困惑,但与任何事情都无关。对此表示抱歉。

    这是一个很大的项目,有很多构建目标和编译标志,使不同的东西发出警告,警告变成错误。在本例中,我添加了标志,以禁用上述记录器的全局标志。m级。但我只在一个目标上添加了那些反标志,而忘了将它们添加到另一个目标上。这就是为什么它没有建造。

    仍然奇怪的是,编译器并没有简单地说:无法构建目标A或在文件B中编译错误。相反,我得到了一条丢失的架构消息,这完全误导了我。。。很抱歉给你添麻烦了。修复了它。