iOS-创建自己的日志系统

今天说说怎么创建自己的日志系统

先看下Xcode自己的日志(这里说的NSLog)

系统自带的NSLog打印的信息只有简单的 时间 / 项目名称 / 打印内容

内容比较简单, 很难做分类管理和写入文件 或者上传等等.

今天我们借用CocoaLumberjack 来自定义自己的日志系统, 最终实现的效果为:

#1. Log信息分类

#2. 时间

#3. 产生log的类

#4. 产生log所在方法名

#5. 代码所在行

#6. log写入文件

最后并实现log上传给后台服务器

好了, 下面来说说怎么实现的

首先我们先看下CocoaLumberjack的基本用法

Pod导入

pod ‘CocoaLumberjack‘

新建pch文件, 并添加:

#import <CocoaLumberjack/CocoaLumberjack.h>
static const DDLogLevel ddLogLevel = DDLogLevelDebug;

ddLogLevel可依照需要设置为:

DDLogLevelError / DDLogLevelWarning / DDLogLevelInfo / DDLogDebug / DDLogLevelOff

如果设置为Debug级别, 则 DDLogLevelError / DDLogLevelWarning / DDLogLevelInfo / DDLogLevelDebug都能产生日志

Info级别, 则DDLogLevelError / DDLogLevelWarning / DDLogLevelInfo都能产生日志, DDlogLevelDebug不能产生日志 也不能显示在xcode console

往前依次类推,

DDLogLevelOff级别是都不显示也不产生日志

做完以上两个步骤就完成的前面的配置工作了

然后参照官方的代码就可以直接用了:

[DDLog addLogger:[DDTTYLogger sharedInstance]]; // TTY = Xcode console
[DDLog addLogger:[DDASLLogger sharedInstance]]; // ASL = Apple System Logs

DDFileLogger *fileLogger = [[DDFileLogger alloc] init]; // File Logger
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[DDLog addLogger:fileLogger];

...

DDLogVerbose(@"Verbose");
DDLogDebug(@"Debug");
DDLogInfo(@"Info");
DDLogWarn(@"Warn");
DDLogError(@"Error");

但这样只能打印基本的只有Verbose / Debug等内容的信息

这里我们需要定义自己的样式, 就是要自己定义DDFileLogger的logFileManager

直接上代码吧:

#import <Foundation/Foundation.h>

@interface MyCustomFormatter : NSObject <DDLogFormatter> {

    int loggerCount;
    NSDateFormatter *threadUnsafeDateFormatter;
}

@end
#import "MyCustomFormatter.h"

@implementation MyCustomFormatter

- (id)init {

    if((self = [super init])) {

        threadUnsafeDateFormatter = [[NSDateFormatter alloc] init];
        [threadUnsafeDateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss:SSS"];
    }

    return self;
}

- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {

    NSString *logLevel;
    switch (logMessage->_flag) {
        case DDLogFlagError    : logLevel = @"Error   "; break;
        case DDLogFlagWarning  : logLevel = @"Warning "; break;
        case DDLogFlagInfo     : logLevel = @"Info    "; break;
        case DDLogFlagDebug    : logLevel = @"Debug   "; break;
        default                : logLevel = @"Default "; break;
    }

    NSString *dateAndTime = [threadUnsafeDateFormatter stringFromDate:(logMessage->_timestamp)];
    NSString *logMsg = logMessage->_message;

    return [NSString stringWithFormat:@"[ %@ %@ ] \n%@", logLevel, dateAndTime, logMsg];
}

- (void)didAddToLogger:(id <DDLogger>)logger {

    loggerCount++;
    NSAssert(loggerCount <= 1, @"This logger isn‘t thread-safe");
}

- (void)willRemoveFromLogger:(id <DDLogger>)logger {

    loggerCount--;
}

@end

然后按照以下方法配置CocoaLumberjack

//配置CocoaLumberjack
    [DDLog addLogger:[DDASLLogger sharedInstance]]; //add log to Apple System Logs
    [DDLog addLogger:[DDTTYLogger sharedInstance]]; //add log to Xcode console

    [DDTTYLogger sharedInstance].logFormatter = [[MyCustomFormatter alloc] init];

    //自定义logfile path
    DDLogFileManagerDefault *logFileManager =     [[DDLogFileManagerDefault alloc] initWithLogsDirectory:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];

    DDFileLogger *customFileLogger = [[DDFileLogger alloc] initWithLogFileManager:logFileManager];

    customFileLogger.rollingFrequency                       = 60 * 60 * 24;
    customFileLogger.logFileManager.maximumNumberOfLogFiles = 7;

    [DDLog addLogger:customFileLogger];

不过这样只是完成了自定义自己要的日志格式并自定义路径

还不能上线上传, 如果要上传有两种方式:

1>直接获取log文件地址, 上传

2>创建一个管理类, 来统一管理日志的关闭和启用

获取日志文件地址的方法:

customFileLogger.currentLogFileInfo.filePath;

推荐第二个

时间: 2024-08-30 07:19:39

iOS-创建自己的日志系统的相关文章

linux学习之路之DNS视图及为DNS创建日志系统

DNS视图 什么是DNS视图(dns view)? DNS视图就是根据不同的客户来源(指的是ip),dns服务器使用不同的数据文件来完成解析过程.在这个过程中dns服务器是相同的,视图中的数据文件是不相同的.因此,不同的来源,使用不同的数据文件来解析,所以,解析后的结果也会不相同. 创建DNS view的过程 1.创建DNS的配置文件/etc/named.conf 只不过这个文件中的内容和之前的有一点不太一样. 在这里作者演示创建xsl.com这个域内的DNS服务器来说明,使服务器具有view功

Java 为程序创建日志系统

使用JAVA创建日志系统有两种方法 1.使用log4j操作日志文件 2.使用系统重定向输出日志信息 方法1:使用log4j操作日志文件(可使用jar或者xml) 步骤1:下载log4j.jar 下载地址:http://mirrors.hust.edu.cn/apache/logging/log4j/1.2.17/log4j-1.2.17.zip 步骤2:导入log4j.jar 1.在当前工程处右键>new(新建)>Folder(文件夹)<没找到的话选Other>wizards>

iOS应用的crash日志的分析基础

iOS应用的crash日志的分析基础 分类: iOS  |  作者: jasonblog 相关  |  发布日期 : 2013-06-22  |  热度 : 11° Outline 如何获得crash日志 如何解析crash日志 如何分析crash日志      1. iOS策略相关      2. 常见错误标识      3. 代码bug 一.如何获得crash日志 当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上.这份crash日志记录着应用程序崩溃时的信息,通常包含着每

iOS开源项目之日志框架CocoaLumberjack

iOS开源项目之日志框架CocoaLumberjack CocoaLumberjack是Mac和iOS上一个集快捷.简单.强大和灵活于一身的日志框架.CocoaLumberjack类似于流行的日志框架(如log4j),但它是专为Objective-C设计的,利用了多线程.GCD(如果可用).无锁原 CocoaLumberjack是Mac和iOS上一个集快捷.简单.强大和灵活于一身的日志框架.CocoaLumberjack类似于流行的日志框架(如log4j),但它是专为Objective-C设计的

DNS的视图功能以及日志系统

实验环境:RHEL5.8 32Bit DNS的视图功能以及日志系统详解 DNS的主配置文件中的allow-recursion参数用来定义能够和DNS服务器进行递归的客户端来源,allow-query参数用来定义允许到DNS服务器上面发起查询请求的客户端,allow-transfer参数用来定义允许和DNS服务器进行区域传送的客户端,区域传送主要有两种方式,axfr和ixfr,使用dig命令也可以模拟实现区域传送: 如果我们的DNS服务器允许进行递归.发起查询请求以及进行区域传送的客户端比较多的话

MySQL日志系统

body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10px; padding-bottom: 10px; background-color: white; padding: 30px } body>*:first-child { margin-top: 0 !important } body>*:last-child { margin-bottom:

日志系统之基于Zookeeper的分布式协同设计

最近这段时间在设计和实现日志系统,在整个日志系统系统中Zookeeper的作用非常重要--它用于协调各个分布式组件并提供必要的配置信息和元数据.这篇文章主要分享一下Zookeeper的使用场景.这里主要涉及到Zookeeper在日志系统中的使用,但其实它在我们的消息总线和搜索模块中也同样非常重要. 日志元数据 日志的类型和日志的字段这里我们统称为日志的元数据.我们构建日志系统的目的最终主要是为了:日志搜索,日志分析.这两大块我们很大程度上依赖于--ElasticSearch(关于什么是Elast

Linux DNS acl、view、日志系统使用

本节以前面主.从DNS为实验环境,讲解DNS acl.view.日志系统相关使用 一.配置DNS acl访问控制列表 acl定义格式: acl string { address_match_element; ... }; 常用几钟类型格式: allow-transfer {}; 允许做区域传送主机 allow-query {};   允许做查询限定 allow-recursion {}; 允许做递归查询列表,通常只给本地客户端做递归 allow-update {}; 允许DNS动态更新,但只能由

Java日志系统框架的设计与实现

推荐一篇好的文章介绍java日志系统框架的设计的文章:http://soft.chinabyte.com/database/438/11321938.shtml 文章内容总结: 日志系统对跟踪调试.程序状态记录.数据恢复等功能有重要作用 日志系统一般作为服务进程或者系统调用存在,我们一般程序中使用系统调用 常用日志系统包括log4j的简单介绍 日志系统的系统架构 日志系统的信息分级 日志输出的设计 下面是全文的引用: 在Java领域,存在大量的日志组件,open-open收录了21个日志组件.日