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;
推荐第二个
附上一个我封装好的Demo, 供大家参考.
https://github.com/zhouxihi/NVLogManager
欢迎大神们指出不足, 跪拜.
也希望大家能不吝star
iOS-创建自己的日志系统的更多相关文章
- 精尽Spring Boot源码分析 - 日志系统
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- iOS 日志系统 本地日志打包上传到服务器
日志系统主要包含两个部分 1.本地保存 我们知道NSLog打印的日志一般都是直接输出到控制台,开发人员可以在控制台直接看到实时打印的log,既然可以在控制台输出,那么能否将日志输出到其他地方呢,比如说 ...
- WCF 项目应用连载[2] - 创建Lig日志系统
WCF 项目应用连载[1] - 索引 - 轻量级的Log系统 - Lig Sample -序 现在我们创建一个Lig工程 - Litelog 2.1 创建Lig服务 _________________ ...
- Java 为程序创建日志系统
使用JAVA创建日志系统有两种方法 1.使用log4j操作日志文件 2.使用系统重定向输出日志信息 方法1:使用log4j操作日志文件(可使用jar或者xml) 步骤1:下载log4j.jar 下载地 ...
- 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统五 | 完善业务自动创建数据库
教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 说明 这节来把基础的业务部分完善一下. 因为 IQue ...
- iOS开源项目之日志框架CocoaLumberjack
CocoaLumberjack是Mac和iOS上一个集快捷.简单.强大和灵活于一身的日志框架.CocoaLumberjack类似于流行的日志框架(如log4j),但它是专为Objective-C设计的 ...
- Atitit.日志系统slf4j的使用
Atitit.日志系统slf4j的使用 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar ...
- 日志系统实战(三)-分布式跟踪的Net实现
介绍 在大型系统开发调试中,跨系统之间联调开始变得不好使了.莫名其妙一个错误爆出来了,日志虽然有记录,但到底是哪里出问题了呢? 是Ios端参数传的不对?还是A系统或B系统提供的接口导致?相信有不少人遇 ...
- 日志系统实战(一)—AOP静态注入
背景 近期在写日志系统,需要在运行时在函数内注入日志记录,并附带函数信息,这时就想到用Aop注入的方式. AOP分动态注入和静态注入两种注入的方式. 动态注入方式 利用Remoting的Context ...
随机推荐
- 爬虫入门系列(三):用 requests 构建知乎 API
爬虫入门系列目录: 爬虫入门系列(一):快速理解HTTP协议 爬虫入门系列(二):优雅的HTTP库requests 爬虫入门系列(三):用 requests 构建知乎 API 在爬虫系列文章 优雅的H ...
- node.js系列(实例):原生node.js实现接收前台post请求提交数据
前台界面: 前台代码: <form class="form-horizontal" method="post" action="http:127 ...
- React服务器渲染最佳实践
源码地址:https://github.com/skyFi/dva-starter React服务器渲染最佳实践 dva-starter 完美使用 dva react react-router,最好用 ...
- javaweb项目-医者天下 (Spring+SpringMVC+MyBatis)
项目下载地址:http://download.csdn.net/detail/qq_33599520/9826683 项目完整结构图: 项目简介: 医者天下项目是一个基于Spring+SpringMV ...
- 通过 bootloader 向其传输启动参数
作者:Younger Liu, 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. Linux提供了一种通过bootloader向其传输启动参数的功能,内核开发 ...
- CSS预处理语言——less与sass的使用
我们一般所使用的Less跟Sass一般是将其编译成我们所熟悉的CSS再导入使用,当然不经编译,直接在浏览器使用 我是习惯用Koala来进行编译,简单智能方便,Hbuilder也自带编译功能,不过要手动 ...
- Angular回到顶部按钮指令
之前的分页代码指令化在线下测试没有问题,到服务器上就不运行了,所以那个先放一放. 今天来把"回到顶部"按钮指令化.首先是页面html: <!--回弹按钮--> < ...
- DDD理论学习系列(1)-- 通用语言
1.引言 在开始之前,我想我们有必要先了解以下DDD的主要参与者.因为毕竟语言是人说的吗,就像我们面向对象编程一样,那通用语言面向的是? DDD的主要参与者:领域专家+开发人员 领域专家:精通业务的任 ...
- 最大流算法之Dinic
引言: 在最大流(一)中我们讨论了关于EK算法的原理与代码实现,此文将讨论与EK算法同级别复杂度(O(N^2M))的算法--Dinic算法. Dinic算法用到的思想是图的分层结构,通过BFS将每一个 ...
- JavaScript中return的用法和this的用法详解
JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对this和函数中的return的用法和意思理解的比较模糊,这里写一篇博客跟大家一起探讨一下return和this的 ...