-
iOS设置日志等级,解放控制台
2020-06-10 15:57:00我们可以把日志分为不同的等级,通过一个开关来控制打印哪些日志,从而屏蔽哪些暂时不关心的日志,解放控制台,让真正需要的信息干净的展示在我们面前。 简单实现 代码里有注释,就不再赘述了,直接使用我这套的同学...背景
开发中我们经常需要用到Log来调试问题,但我们也常常深受其害。开发新功能的时候,总是被一些乱七八糟的日志所干扰,找不到自己需要的日志信息。这个时候你一定想快速的屏蔽掉那些暂时不需要关心的Log。日志分级由此而生。
日志分级
我们可以把日志分为不同的等级,通过一个开关来控制打印哪些日志,从而屏蔽哪些暂时不关心的日志,解放控制台,让真正需要的信息干净的展示在我们面前。
简单实现
代码里有注释,就不再赘述了,直接使用我这套的同学,只需要创建一个头文件,按照顺序吧下面代码粘进去就行了。然后再适当的地方,调不同的打印方式。
- 划分等级
按照自己的需求将日志分为几个不同等级,大家可以自己定义,也可以直接使用我的分级模式。
typedef NS_ENUM(NSInteger,LGLogLevel) { LGLogLevelNone = 0, // 不打印 LGLogLevelFatal = 1 << 0, // 打印严重、重要信息 LGLogLevelError = 1 << 1, // 打印错误 LGLogLevelDebug = 1 << 2, // 打印正常调试,如请求结果 LGLogLevelSimple = 1 << 3, // 打印次要信息,如日志上报记录 };
- 设置等级
#ifdef DEBUG /* 根据自己需求设置日志级别: LG_LOG_LEVEL_NONE, LG_LOG_LEVEL_FATAL, LG_LOG_LEVEL_ERROR, LG_LOG_LEVEL_DEBUG, LG_LOG_LEVEL_ALL*/ #define LG_LOG_LEVEL_DEBUG #else #define LG_LOG_LEVEL_NONE #endif
- 判断等级
// 根据设置的等级,判断需要打印哪些等级的日志 #ifdef LG_LOG_LEVEL_NONE static const int LG_LOG_LEVEL = LGLogLevelNone; #elif defined(LG_LOG_LEVEL_FATAL) static const int LG_LOG_LEVEL = LGLogLevelFatal; #elif defined(LG_LOG_LEVEL_ERROR) static const int LG_LOG_LEVEL = (LGLogLevelFatal | LGLogLevelError); #elif defined(LG_LOG_LEVEL_DEBUG) static const int LG_LOG_LEVEL = (LGLogLevelFatal | LGLogLevelError | LGLogLevelDebug); #elif defined(LG_LOG_LEVEL_ALL) static const int LG_LOG_LEVEL = (LGLogLevelFatal | LGLogLevelError | LGLogLevelDebug | LGLogLevelSimple); #endif
- 区分打印日志
/** * 期望在严重级别打印,调用LGLogFatal 重要信息,如可能引起崩溃的内容、当前最关系的信息 * 期望在错误级别打印,调用LGLogError 错误信息,如解析失败、参数非法、错误回调 * 期望在调试级别打印,调用LGLogDebug 调试信息,如请求结果、参数内容 * 仅在打印所有信息时打印,调用LGLogSimple 次要信息,如日志上报记录、网络状态改变 */ #define LGLogFatal(fmt, ...) \ if (LG_LOG_LEVEL & LGLogLevelFatal){LGLog(fmt, ##__VA_ARGS__);} #define LGLogError(fmt, ...) \ if (LG_LOG_LEVEL & LGLogLevelError){LGLog(fmt, ##__VA_ARGS__);} #define LGLogDebug(fmt, ...) \ if (LG_LOG_LEVEL & LGLogLevelDebug){LGLog(fmt, ##__VA_ARGS__);} #define LGLogSimple(fmt, ...) \ if (LG_LOG_LEVEL & LGLogLevelSimple){LGLog(fmt, ##__VA_ARGS__);} /** 解决日志打印不全问题, 如果想总是打印日志(包括线上环境),调用LGLog*/ #define LGLog(fmt, ...) do{ \ fprintf(stderr, "%s %s\n%s [Line %d]\n%s\n",\ [[NSDate date] description] UTF8String],\ [@"**********打印信息***********" UTF8String],\ __PRETTY_FUNCTION__, __LINE__,[[NSString stringWithFormat:(fmt), ##__VA_ARGS__] UTF8String]);\ }while(0)
注意:这里打印的时间精确度不是很高,我自己是写了一个时间格式化的分类方法,将时间精确到毫秒后6位:
yyyy-MM-dd HH:mm:ss.SSSSSS
使用
我们只需要在设置等级的位置,根据需求设置对应的日志等级。开发的过程中,在适当的地方调用适当的打印方法就行了,比如数据解析错误时,调用
LGLogError()
;收到网络请求的响应时,调用LGLogDebug()
。- 屏蔽所有日志,只打印正在开发的模块的日志
我们预留了重要日志等级LG_LOG_LEVEL_FATAL
,开发新模块时,可以把日志等级设置成LG_LOG_LEVEL_FATAL
,然后该模块中都使用LGLogFatal()
,开发完成后,全局搜索LGLogFatal()
并替换成适当的方法。 - 只打印某个类型的日志
假如我们现在要关注LGLogLevelSimple
类型日志,我们必须设置日志等级为LG_LOG_LEVEL_ALL
,但是怎么屏蔽其他的日志类型呢。其实很简单,在判断等级的位置做一些少许的改动,调试完之后再设置回去就好了。
注意设置的日志等级一定要包含你想关注的那类日志。
#ifdef LG_LOG_LEVEL_NONE #elif defined(LG_LOG_LEVEL_ALL) static const int LG_LOG_LEVEL = LGLogLevelSimple; // 暂时修改为LGLogLevelSimple,只有调用LGLogSimple()的地方才能打印日志 #endif
- 旧项目折中方案
对于旧项目我们没有必要每个位置都替换,先把一些广泛使用的基类里面的打印替换掉。选择性的把一些打印内容很多,但不是很关心的日志替换调。
- 划分等级
-
深入到源码:解读 redux 的设计思路与用法
2020-12-30 12:58:03并不想让 redux 局限于 react 生态链中的一环。他们让 redux 自身保持简洁以便适配各种场景,让社区发展出各种 <code>redux-*</code> 中间件或者插件,从而形成它自己的生态系统。 <p>redux 的核心很... -
微信调试、API、AJAX的调试SocketLog.zip
2019-07-19 04:56:14这时候用SocketLog最好,SocketLog 通过websocket将调试日志打印到浏览器的console中。你还可以用它来分析开源程序,分析SQL性能,结合taint分析程序漏洞。 SocketLog 支持SAE等特殊的运行环境,Chrome... -
一些编程的小技巧(一)
2009-10-21 23:01:00捕获异常后, 使用日志记录异常信息。这样可以很好地分析是哪些异常发生,哪个地方出现了问题,可以使用LOG4J, 或者其他... ...}1) 只能把当前异常信息打印到系统标准输出中,而无法显示出详细的异常堆栈信息,也不能捕获异常后, 使用日志记录异常信息 。这样可以很好地分析是哪些异常发生,哪个地方出现了问题,可以使用LOG4J, 或者其他的。
catch (Exception e)
{
logger.error(e.getMessage(), e);
//或者logger.error(e);
... ...
}1) 只能把当前异常信息打印到系统标准输出中,而无法显示出详细的异常堆栈信息,也不能将异常信息打印到日志文件中
catch (Exception e)
{
System.out.println(e);
}
2)虽然能打印出详细的异常堆栈信息,但同样不能将这些信息打印到日志文件中,而只是打印到控制台catch (Exception e)
{
e.printStackTrace();
}
3) 如果在catch块中什么都不做就相当于将这个异常忽略掉了,导致程序在遇到错误时悄然执行下去,以致造成无可挽回的失败
catch (Exception e)
{
}下面简单说下LOG4J的配置:
-
阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx
2020-01-09 20:48:33避免重复打印日志,浪费磁盘空间,务必在log4j.xml中设置additivity=false。 D .错误日志和业务日志尽量分开存放。 多选 16.关于代码注释,下列哪些说法符合《阿里巴巴Java开发手册》:ABD A .特殊注释标记,请... -
Sysinternals 实用程序全集 (完整版 49.2M)
2012-03-26 16:07:54这一简单但功能强大的安全工具可以显示哪些用户对您系统中的目录、文件和注册表项具有何种访问权限。使用此工具可查找权限漏洞。 Autologon 在登录过程中跳过密码屏幕。 Autoruns 查看哪些程序被配置为在系统... -
NetSupport School .v11.41.0007简体中文版(含注册机)
2017-10-20 09:27:53教师可以向日志中添加章节,创建书签,甚至将其日志中缺失的内容与缺课学生同步,或者只是让文档显得更专业以及添加学校徽标。 该日志实现了课程内所有活动的完全记录,协助完成家庭作业和复习,为缺课学生提供宝贵... -
在添加信息里新增了批量导入功能,可以导入指定格式的Excel表格,这个功能调试了很久,因为PHPExcel包的位置一直没有放对,我还写了导入数据时的动态更新进度功能,可以看哪些信息出错导入失败,导入功能还是很好玩...
-
网趣网上购物系统时尚版V13.0
2015-09-12 16:35:34经常关注自己的网站总是想知道,网站的哪些信息更受用户欢迎?用户更关注什么产品?新增的搜索关键词功能,可以记录用户在网站上搜索过哪些关词,以及相同关键词的搜索次数等信息,帮助管理员分析网站很有利。 二... -
文件加密软件——绿盾
2008-06-27 16:55:00提供应用程序白名单和黑名单功能,方便地限制员工可以运行哪些程序,不能运行哪些程序; 4、文件及目录操作记录:详细记录文件创建、重命名、删除的情况;详细记录文件夹(目录)创建、重命名、删除等情况。 5、... -
网趣商城ASP源码
2013-02-17 17:11:35经常关注自己的网站总是想知道,网站的哪些信息更受用户欢迎?用户更关注什么产品?新增的搜索关键词功能,可以记录用户在网站上搜索过哪些关词,以及相同关键词的搜索次数等信息,帮助管理员分析网站很有利。 二... -
NetSupport School 课堂管理软件(简体中文版)
2014-09-05 16:53:07教师可以向日志中添加章节,创建书签,甚至将其日志中缺失的内容与缺课学生同步,或者只是让文档显得更专业以及添加学校徽标。 该日志实现了课程内所有活动的完全记录,协助完成家庭作业和复习,为缺课学生提供宝贵... -
在命令行输入,gradlew compileDebugSources,可以查看打印报错的信息,这句话可以控制台输出代码报错的日志。 IOException: CreateProcess error=2, 系统找不到指定的文件。 具体报错日志如下所示 ...
-
Windows Sysinternals Suite v2019.06.29.zip
2019-07-14 18:41:59这一简单但强大的安全工具可以向您显示,谁可以用何种访问权限访问您系统中的目录、文件和注册表项。使用此工具可查找权限漏洞。 AdExplorer Active Directory Explorer 是一个高级的 Active Directory (AD) 查看... -
注册表批量修改权限命令
2016-11-09 11:40:27这一简单但强大的安全工具可以向您显示,谁可以用何种访问权限访问您系统中的目录、文件和注册表项。使用此工具可查找权限漏洞。 AdExplorer Active Directory Explorer 是一个高级的 Active Directory (AD) 查看器... -
Auslogics BitReplica(免费数据备份工具)v1.7.0.7.zip
2019-07-14 07:55:24将数据备份到软盘的过程中,数据量太大,一张盘装不下,应如下操作: 首先将基础信息(系统设置库、职员权限库、货品编码库、摘要库、货币库、门市及仓库、客户帐户库、产品、组合模板、订单打印模板)备份到一张盘... -
微软Sysinternals Suite工具包 2018.12.18 官方版.zip
2019-07-09 18:07:08这一简单但强大的安全工具可以向您显示,谁可以用何种访问权限访问您系统中的目录、文件和注册表项。使用此工具可查找权限漏洞。AdExplorer Active Directory Explorer 是一个高级的 Active Directory (AD) 查看器... -
coreutils-8.32.tar.gz
2020-04-30 13:16:46使某个命令不被挂起,并将输出重定向到一个日志文件。 od 以数字方式显示指定文件的内容,默认为八进制。 paste 将字段连接在一起,在字段之间自动插入分割符,默认的分割符是 Tab 。 pathchk 检查文件名是否... -
View的OnClick事件在BindingAdapter中方法使用RxView防重复点击,再把事件回调到ViewModel层,实现xml与ViewModel之间数据和事件的绑定(框架里面部分扩展控件和回调命令使用的是@kelin原创的)。 基类封装 专门针对...
-
logs文件夹下会生成lts-admin.out日志,启动成功在日志中会打印出访问地址,用户可以通过这个访问地址访问了。 JobClient(部署)使用 需要引入lts的jar包有lts-jobclient-{version}.jar,lts-core-{version}.jar ...
-
C++网络爬虫项目
2018-07-04 00:59:17信息获取到本地,因为互联网页面中有相当大比例的内容是完全相同或者近似 重复的,“网页去重”模块会对此做出检测,并去除重复内容。 在此之后,搜索引擎会对网页进行解析,抽取网页主体内容,以及页面中包含 的... -
电脑蓝屏对照码
2019-05-05 14:16:40把蓝屏中密密麻麻的E文记下来, 接着到其他电脑中上网, 进入微软帮助与支持网站http://support.microsoft.com?, 在左上角的"搜索(知识库)"中输入停机码, 如果搜索结果没有适合信息, 可以选择"英文知识库"在搜索一遍.... -
VQ美容美发会员管理软件
2007-05-24 10:20:44档案信息 变更客户的会员卡的卡号 从系统中删除客户及帐户信息 打印会员档案信息/会员花名册 将客户档案输出到 Excel 文件 <br/> 客服管理 <br/>会员生日关怀 自动列出当天过... -
计量管理软件
2012-02-02 11:49:47耐特信计量管理系统(测量管理体系版) Netson measurement manmgement systems 耐特信计量管理体系版是...将原始记录及重要文件以附件的关联形式存储到数据库中,可以快速、准确了解该测量设备的全部相关重要信息。 -
WIN XP蓝屏代码大全
2013-08-08 12:29:21把蓝屏中密密麻麻的E文记下来, 接着到其他电脑中上网, 进入微软帮助与支持网站http://support.microsoft.com?, 在左上角的"搜索(知识库)"中输入停机码, 如果搜索结果没有适合信息, 可以选择"英文知识库"在搜索一遍.... -
LINGO软件的学习
2009-08-08 22:36:50如果集成员不放在集定义中,那么可以在随后的数据部分定义它们。 ① 当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,允许混合使用。 例2.1 可以定义一个名为students的原始集,它具有... -
人力资源管理软件(完全免费)
2011-03-08 11:36:20人力资源管理软件解决了有些拼音码检索不到的问题(感谢☆缘☆,腿腿*^ō^*乖) 员工定制界面重叠问题(感谢我就是我)(人力资源软件) 考勤天和小时转换(感谢iplan) 人力资源管理软件考勤计算匹配请假、出差的漏洞... -
微软活动目录管理管理简明手册
2010-12-08 11:04:17而如果活动目录中的资源对应的是LDAP标识,那么只需要DNS中有这个标识的定位记录就可以很方便地供用户查找资源,并寻址到相应的位置上。' u* [+ L2 m- \ j: h: L. r7 u 有关DNS服务器的配置,读者可以参考《电脑报... -
新版Android开发教程.rar
2010-12-14 15:49:11� Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造 成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------... -
PHP基础教程 是一个比较有价值的PHP新手教程!
2010-04-24 18:52:44你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到。安装...
-
java 从字符串中删除一个字符_如何从字符串中删除单个字符
-
java开关语句_Java中嵌套开关语句的替代方法
-
Leetcode offer系刷题 || 二维数组中的查找
-
tesseract java 验证码_使用tesseract进行图形验证码识别
-
移动它-源码
-
共振双光子放大器的理论研究
-
MySQL 四类管理日志(详解及高阶配置)
-
neno:NENO是一个记笔记应用程序,可帮助您创建个人知识图-源码
-
velocity java 静态方法_java – 如何访问Velocity模板中的静态成员?
-
华为1+X认证——网络系统建设与运维(初级)
-
微分子元素分析.doc
-
基于可观察性的运维创新
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
华为1+X——网络系统建设与运维(中级)
-
RandomStringUtils工具类
-
MySQL 管理利器 mysql-utilities
-
Python函数库深度详解(1)
-
基于微信的同城小程序、校园二手交易小程序 毕业设计毕设源码使用教程
-
基于电流相似度分析的两级三相PWM整流器开路故障诊断
-
上G文件复制的三种方法