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 ...
随机推荐
- WIN10远程计算机不支持所需的FIPS安全级别解决
win10系统的电脑在远程xp系统或者其他系统的电脑时,提示错误,远程计算机可能不支持所需的FIPS安全级别,如果出现一以下2种错误,可以解决! 1 第一步:打开win10下的,控制面板 2 第二 ...
- AS中jar包和aar包区别及导入导出
发布时间:2018-01-18 来源:网络 上传者:用户 关键字: 导出 导入 区别 包和 aar jar 发表文章 摘要:jar包和aar包区别*.jar:只包含class文件与清单文件,不包含资源 ...
- 线段树合并+并查集 || BZOJ 2733: [HNOI2012]永无乡 || Luogu P3224 [HNOI2012]永无乡
题面:P3224 [HNOI2012]永无乡 题解: 随便写写 代码: #include<cstdio> #include<cstring> #include<iostr ...
- TSL 访问器
设计原理:GE有一个分布式内存基础设施,成为内存云.内存云由一组内存主干组成.集群中的每台机器承载256个内存中继.我们将一台机器的本地内存空间划分为多个内存中继的原因有两方面:1)中继级别的并行性可 ...
- 数据可视化——阿里云解决方案DataV
数据可视化——阿里云解决方案DataV https://help.aliyun.com/document_detail/53844.html?spm=a2c4g.11186623.6.579.37fd ...
- shell 脚本示例
#!/bin/sh #while true #do cd /mnt/vfw/third_meteor for sub in `ls` do cd /mnt/vfw/third_meteor/${sub ...
- MySQL 的安装
MySQL的全部安装步骤. 1::本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认 ...
- python基础3 条件判断 if嵌套
if单向判断: stonenumber=6#为宝石数量赋值 if stonenumber>=6: #条件:如果你拥有的宝石数量大于等于6个 print('你拥有了毁灭宇宙的力量') #结果:显示 ...
- SoupUI 5.1.2(专业版)下载(含破解文件)
包内含原安装包和破解文件,仅用于技术交流,切勿用于商业用途. 安装教程参考:https://www.cnblogs.com/miaojjblog/p/9778839.html 安装包及破解文件下载地址 ...
- vue 子组件调用父组件的方法
vue中 父子组件的通信: 子组件通过 props: { //子组件中写的. childMsg: { //字段名 type: Array,//类型 default: [0,0,0] //这样可以指定默 ...