CocoaLumberjack framework 自定义日志管理

github英文连接: git

https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted github

入门翻译全文: xcode

 想要学习这个框架只须要三个步骤

  1 把框架添加到你的应用程序

  2 配置框架
  3 用Lumberjack输入代替你的NSLog输出

 

下面详细介绍每一个步骤

1 把框架添加到你的应用程序

 主要添加的文件有如下四个

 @ DDLog(基础框架)

 @ DDASLLogger(发送到苹果的日志系统,他们显示到控制台上),我的建议没有必要

 @DDTTYLoyger (发送日志语句到控制台)

 @DDFIleLoger (把输出信息写进文件中)

DDLog是强制性的,其他的都是可选的,这取决于你如何打算使用这个框架,若是你不打算纪录到一个文件,你能够跳过DDFileLogger,或者你想跳过ASl 在你的爱好快速纪录日志,你能够跳过DDASLLoger

 2 配置框架

  第一件事情你要作的是在你applicationDidFinishLaunching方法中配置(一般是这么作)添加你所须要的文件

  下面几行代码是在开始的时候所须要的

  [DDLog addLogger:[DDASLLogger sharedInstance]];

      [DDLog addLogger:[DDTTYLogger sharedInstance]];

  上面两行代码添加了一对logging框架,换句话说,你的日志语句已经可以发送到控制台,(就像一个正常的NSLog)

  这个框架的好处之一就是它的灵活性,若是你还想要你的日志语句写入到一个文件中,你能够添加和配置fileLogger

  fileLogger = [[DDFileLogger alloc] init];

 fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling

  fileLogger.logFileManager.maximumNumberOfLogFiles = 7;

  [DDLog addLogger:fileLogger];

上面的代码是告诉应用程序保持一周的日志文件系统


3 用Lumberjack输入代替你的NSLog输出

DDLog的头文件定义了宏,您将使用来取代你的NSLog语句。你能够参考下面的语句来代替你的NSlog

// Convert from this:
NSLog(@"Broken sprocket detected!");
NSLog(@"User selected file:%@ withSize:%u", filePath, fileSize);

// To this:
DDLogError(@"Broken sprocket detected!");
DDLogVerbose(@"User selected file:%@ withSize:%u", filePath, fileSize);

咱们看到DDLog和NSLog有这彻底相同的语法,在使用的时候不会有人和的障碍。

DDLog默认有四种级别的日志,你所要作的就是决定使用那种日志级别来打印你的日志语句,它们分别是:

@DDlogError
@DDlogWarn
@DDlogInfo
@DDlogVerbose

注释:你也能够自定义级别,你能够添加上更细微的控制代替系统四个简单的等级。
固然你选择那个NSLog语句,这取决于你的消息的严重程度。

下面的这些不一样的日志等级也许正有你所须要的

若是你设置的日志级别为 LOG_LEVEL_ERROR那么你只会看到DDlogError语句的输出。
若是你将日志的级别设置为LOG_LEVEL_WARN那么你只会看到DDLogError和DDLogWarn语句。
若是您将日志级别设置为 LOG_LEVEL_INFO,您将看到error、Warn和信息报表。
若是您将日志级别设置为LOG_LEVEL_VERBOSE,您将看到全部DDLog语句。
若是您将日志级别设置为 LOG_LEVEL_OFF,你不会看到任何DDLog语句。

那么我在哪里设置日志级别?我必须使用一个日志级别为个人整个项目吗?


固然不是,咱们都知道它就像调试或者添加新的特性,你想详细纪录你目前正在调试的部分,这个框架提供了对每一个文件的调试,因此你能够修改日志级别在你正在编辑的文件中。

注释:(固然还有许多其余高级选项,好比全球日志级别,每xcode配置水平,每记录器级别等。可是咱们会去,在另外一篇文章)。
下面是详细的如何在你的代码中运用这个框架
// CONVERT FROM THIS

#import "Sprocket.h"

@implementation Sprocket

- (void)someMethod
{
    NSLog(@"Meet George Jetson");
}

@end

// TO THIS

#import "Sprocket.h"
#import "DDLog.h"

static const int ddLogLevel = LOG_LEVEL_VERBOSE;

@implementation Sprocket

- (void)someMethod
{
    DDLogVerbose(@"Meet George Jetson");
}

@end
 

注意日志级别声明为常数,这意味着DDLog以上声明的日志级别将被认为默认值,编译到你的项目中。(当你的编译器优化打开的时候,那就是你的发布版本)
好,基本的DDlog框架就是这些,但愿对你有所帮助,下一篇翻译更深的知识。 服务器

深刻篇: app

也许看了上面的简单介绍,不知道如何去设置打印的级别,其实很简单,个人作法是构造一个头文件,由于咱们会在不少的文件中用到这个级别设定,因此咱们单独列出来,那个文件用只须要去引用头文件便可
在头文件中写入以下代码
#import "DDLog.h"
#import "DDTTYLogger.h"
#import "DDASLLogger.h"
#import "DDFileLogger.h"


#if DEBUG
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
static const int ddLogLevel = LOG_LEVEL_INFO;
#endif
 其中if中是调试的时候的级别,下面else的级别是发布版本的时候的日志的级别,例如,咱们但愿向服务器抛出一些异常,那么咱们就能够把debug级别设为LOG_LEVEL_VERBOSE 把发布版本的日志级别设为LOG_LEVEL_ERROR,这样在发布的时候,应用程序只会把用DDLogError输出的日志,写到文件中,文件在应用程序的沙盒路径的Caches的Logs文件夹中,咱们要作的就是把这个文件夹发到服务器上。发布的方法以下

/**
 * 得到系统日志的路径
 **/
-(NSArray*)getLogPath
{
    
     NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    
     NSString * logPath = [docPath stringByAppendingPathComponent:@"Caches"];
    logPath = [logPath stringByAppendingPathComponent:@"Logs"];
 
    
    NSFileManager * fileManger = [NSFileManager defaultManager];
    NSError * error = nil;
    NSArray * fileList = [[NSArray alloc]init];
    fileList = [fileManger contentsOfDirectoryAtPath:logPath error:&error];
    NSMutableArray * listArray = [[NSMutableArray alloc]init];
    for (NSString * oneLogPath in fileList)
    {
        if([oneLogPath characterAtIndex:0 ] == 'l')
        {
            NSString * truePath = [logPath stringByAppendingPathComponent:oneLogPath];
            [listArray addObject:truePath];
        }
    }
    return listArray;
    

 
} 框架

相关文章
相关标签/搜索