iOS项目之使用开关控制日志输出的功能
最近一直在做sdk的项目,用户提出了一个需求,需要屏蔽sdk内部的日志输出。由于sdk内部的日志是为了调试,如果屏蔽了肯定不方便,所以研究了一下日志输出开关的功能。
在这里介绍两种实现方案:一种方案是使用NSUserDefaults,一种方案是使用自定义类来控制。
第一种方案:NSUserDefaults
这种方案比较简单,主要使用NSUserDefaults来存储日志输出的状态。直接上代码:
// 日志状态获取
[[[NSUserDefaults standardUserDefaults] valueForKey:@"kLogEnable"] boolValue]; // 日志状态修改
NSUserDefaults *userD = [NSUserDefaults standardUserDefaults];
[userD setValue:@(s.isOn) forKey:@"kLogEnable"];
[userD synchronize];
然后在.pch文件中添加宏来进行判断输出日志功能:
#define customLogEnable [[[NSUserDefaults standardUserDefaults] valueForKey:@"kLogEnable"] boolValue] #define FirstMethodLog(format,...) if(customLogEnable) {\
NSLog((@"%s[%d]" format), __FUNCTION__, __LINE__, ##__VA_ARGS__);\
} else {}
这样在其他地方使用FirstMethodLog方法来输出日志,就可以实现控制日志输出的功能。
第二种方案:自定义日志输出管理类CustomLogManager
首先在.h文件中提供几个方法:
// 设置日志输出状态
+ (void)setLogEnable:(BOOL)enable; // 获取日志输出状态
+ (BOOL)getLogEnable; // 日志输出方法
+ (void)customLogWithFunction:(const char *)function lineNumber:(int)lineNumber formatString:(NSString *)formatString;
然后在.m文件中,设置静态变量来存储日志输出状态值
// 默认值为NO
static BOOL kLogEnable = NO;
类方法的实现:
+ (void)setLogEnable:(BOOL)enable {
kLogEnable = enable;
} + (BOOL)getLogEnable {
return kLogEnable;
} + (void)customLogWithFunction:(const char *)function lineNumber:(int)lineNumber formatString:(NSString *)formatString { if ([self getLogEnable]) {
// 开启了Log
NSLog(@"%s[%d]%@", function, lineNumber, formatString);
}
}
最后添加宏定义
#define SecondMethodLog(format,...) [CutomLogManager customLogWithFunction:__FUNCTION__ lineNumber:__LINE__ formatString:[NSString stringWithFormat:format, ##__VA_ARGS__]]
这样在其他地方使用SecondMethodLog方法来输出日志,就可以控制日志输出了。
在这里附上Demo:CustomLogDemo
iOS项目之使用开关控制日志输出的功能的更多相关文章
- Spark:控制日志输出级别
Spark:控制日志输出级别 终端修改 在pySpark终端可使用下面命令来改变日志级别 sc.setLogLevel("WARN") # 或者INFO等 修改日志设置文件 ** ...
- Android 项目Log日志输出优化
概述 Android开发过程中经常需要向控制台输出日志信息,有些人还在用Log.i(tag,msg)的形式或者system.out.println(msg)方式吗?本篇文章对日志信息输出进行优化,以达 ...
- (转)log4j(二)——如何控制日志信息的输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 先看栗子再来下结论 import org.apache.log4j.*; import test.log4j.bean ...
- log4j(二)——如何控制日志信息的输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 二:先看栗子再来下结论 import org.apache.log4j.*; import test.log4j.bean ...
- 通配置文件的方式控制java.util.logging.Logger日志输出
转自:http://zochen.iteye.com/blog/616151 简单的实现了下利用JDK中类java.util.logging.Logger来记录日志.主要在于仿照log4j方式用配置文 ...
- 《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)
1.简介 自动化测试中如何输出日志文件.任何软件,都会涉及到日志输出.所以,在测试人员报bug,特别是崩溃的bug,一般都要提供软件产品的日志文件.开发通过看日志文件,知道这个崩溃产生的原因,至少知道 ...
- Django 日志输出及打印--logging
Django使用python自带的logging作为日志打印工具. logging是线程安全的,主要分为4部分: Logger 用户使用的直接接口,将日志传递给Handler Handler 控制日志 ...
- Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console、file等。Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别。
Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console.file等.Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别. ...
- AMQ学习笔记 - 19. 问题解决 - 控制Atomikos的日志输出
概述 在使用Atomikos为ActiveMQ提供JTA支持时,Atomikos在控制台打印了繁琐的日志.这里介绍如何控制Atomikos日志输出的粒度. 解决方案 基于以下三个事实: Atomiko ...
随机推荐
- 虚拟机设置IP
方式NAT 版本信息VMware(14.1.1 build-7528167)和centos7 一,设置网络适配器: 二.设置虚拟网络 三.配置虚拟机(/etc/sysconfig/network-sc ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- AppStore关键词覆盖法则标记
https://www.jianshu.com/p/6b39b0dc6ba4 多批设置关键字
- Windows 10 编译 OpenJDK11
下载openjdk11源码 hg clone https://hg.openjdk.java.net/jdk-updates/jdk11u-dev/
- MarkDown语言
参考: 参考:https://typora.io/ 参考:https://caret.io/ Markdown是一种轻量级标记语言,创始人为約翰·格魯伯(英语:John Gruber). 它允许人们“ ...
- webToImage (网页转图片)模块试用分享
模块介绍: 本模块封装了把 webview 转换成图片的功能.调用本模块的transImage接口,可把当前 webview显示的内容转换成一张图片.注意,本模块只能把当前的webview页面转换为图 ...
- nginx域名跳转到www下
- 【mybatis】mybatis中 <if test=>等于的条件怎么写
- Python文件常用操作方法
Python文件常用操作方法 一.对File对象常用操作方法: file= open(file, mode='r', buffering=-1, encoding=None, errors=None, ...
- keras笔记
函数式模型 函数式模型算是本文档比较原创的词汇了,所以这里要说一下 在Keras 0.x中,模型其实有两种,一种叫Sequential,称为序贯模型,也就是单输入单输出,一条路通到底,层与层之间只有相 ...