精华内容
下载资源
问答
  • 我们可以日志分为不同的等级,通过一个开关来控制打印哪些日志,从而屏蔽哪些暂时关心的日志,解放控制台,让真正需要的信息干净的展示在我们面前。 简单实现 代码里有注释,就不再赘述了,直接使用我这套的同学...

    背景

    开发中我们经常需要用到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()

    1. 屏蔽所有日志,只打印正在开发的模块的日志
      我们预留了重要日志等级LG_LOG_LEVEL_FATAL,开发新模块时,可以把日志等级设置成LG_LOG_LEVEL_FATAL,然后该模块中都使用LGLogFatal(),开发完成后,全局搜索LGLogFatal()并替换成适当的方法。
    2. 只打印某个类型的日志
      假如我们现在要关注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
    
    
    1. 旧项目折中方案
      对于旧项目我们没有必要每个位置都替换,先把一些广泛使用的基类里面的打印替换掉。选择性的把一些打印内容很多,但不是很关心的日志替换调。
    展开全文
  • 想让 redux 局限于 react 生态链的一环。他们让 redux 自身保持简洁以便适配各种场景,让社区发展出各种 <code>redux-*</code> 中间件或者插件,从而形成它自己的生态系统。 <p>redux 的核心很...
  • 这时候用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的配置:

     

    展开全文
  • 避免重复打印日志,浪费磁盘空间,务必在log4j.xml设置additivity=false。 D .错误日志和业务日志尽量分开存放。 多选 16.关于代码注释,下列哪些说法符合《阿里巴巴Java开发手册》:ABD A .特殊注释标记,请...
  • 这一简单但功能强大的安全工具可以显示哪些用户对您系统的目录、文件和注册表项具有何种访问权限。使用此工具可查找权限漏洞。 Autologon 在登录过程跳过密码屏幕。 Autoruns 查看哪些程序被配置为在系统...
  • 教师可以日志中添加章节,创建书签,甚至将其日志中缺失的内容与缺课学生同步,或者只是让文档显得更专业以及添加学校徽标。 该日志实现了课程内所有活动的完全记录,协助完成家庭作业和复习,为缺课学生提供宝贵...
  • 在添加信息里新增了批量导入功能,可以导入指定格式的Excel表格,这个功能调试了很久,因为PHPExcel包的位置一直没有放对,我还写了导入数据时的动态更新进度功能,可以哪些信息出错导入失败,导入功能还是很好玩...
  • 经常关注自己的网站总是想知道,网站的哪些信息更受用户欢迎?用户更关注什么产品?新增的搜索关键词功能,可以记录用户在网站上搜索过哪些关词,以及相同关键词的搜索次数等信息,帮助管理员分析网站很有利。 二...
  • 提供应用程序白名单和黑名单功能,方便地限制员工可以运行哪些程序,能运行哪些程序; 4、文件及目录操作记录:详细记录文件创建、重命名、删除的情况;详细记录文件夹(目录)创建、重命名、删除等情况。 5、...
  • 网趣商城ASP源码

    2013-02-17 17:11:35
    经常关注自己的网站总是想知道,网站的哪些信息更受用户欢迎?用户更关注什么产品?新增的搜索关键词功能,可以记录用户在网站上搜索过哪些关词,以及相同关键词的搜索次数等信息,帮助管理员分析网站很有利。 二...
  • 教师可以日志中添加章节,创建书签,甚至将其日志中缺失的内容与缺课学生同步,或者只是让文档显得更专业以及添加学校徽标。 该日志实现了课程内所有活动的完全记录,协助完成家庭作业和复习,为缺课学生提供宝贵...
  • 在命令行输入,gradlew compileDebugSources,可以查看打印报错的信息,这句话可以控制台输出代码报错的日志。 IOException: CreateProcess error=2, 系统找不到指定的文件。 具体报错日志如下所示 ...
  • 这一简单但强大的安全工具可以向您显示,谁可以用何种访问权限访问您系统的目录、文件和注册表项。使用此工具可查找权限漏洞。 AdExplorer Active Directory Explorer 是一个高级的 Active Directory (AD) 查看...
  • 这一简单但强大的安全工具可以向您显示,谁可以用何种访问权限访问您系统的目录、文件和注册表项。使用此工具可查找权限漏洞。 AdExplorer Active Directory Explorer 是一个高级的 Active Directory (AD) 查看器...
  • 将数据备份软盘的过程,数据量太大,一张盘装下,应如下操作: 首先将基础信息(系统设置库、职员权限库、货品编码库、摘要库、货币库、门市及仓库、客户帐户库、产品、组合模板、订单打印模板)备份一张盘...
  • 这一简单但强大的安全工具可以向您显示,谁可以用何种访问权限访问您系统的目录、文件和注册表项。使用此工具可查找权限漏洞。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?, 在左上角的"搜索(知识库)"输入停机码, 如果搜索结果没有适合信息, 可以选择"英文知识库"在搜索一遍....
  • 档案信息  变更客户的会员卡的卡号  从系统删除客户及帐户信息  打印会员档案信息/会员花名册  将客户档案输出 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) 人力资源管理软件考勤计算匹配请假、出差的漏洞...
  • 而如果活动目录的资源对应的是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在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到。安装...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

哪些信息不可以打印到日志中