最近,经常会碰到一些这样的脚本:脚本的功能是去删除一些相关的系统配置。在系统里,有一类配置A,脚本script_removeA的功能就是删除A。运行script_removeA,成功删除A,返回true。但是,这里就有一个潜在的问题,如果第二次运行该脚本,该如何输出运行结果?删除配置的话,配置已经没有了,实际上没有做任何操作。那是不是要输出false呢?

这个时候,我觉得应该从脚本的功能出发,脚本的功能就是去删除配置A,如果配置A已经被删除了,仍然要输出true。因为脚本A的运行,证明了A是被删除了的。运行别的脚本并没有办法证明A被删除了,从这个意义上讲,‘A也是被脚本script_removeA的运行删除的’。这个时候,脚本的功能已不仅仅是局限于删除A了,而是要检查A有没有被删除,如果被删除了,仍然要告诉用户运行成功,配置A被删除。细化一点,假如A是一组配置的集合,下面有配置a,配置b,配置c还有d,其中a和d已经被删除了,那么期望中的script_removeA应该要删除b和c,并且成功检测出a和d已经被删除,(而不是退出运行,并报错!)最终输出删除成功。当然了,如果实际上并没有删除成功的话,应该要给出false的输出。

上面是一个很具体的问题,就是在运行一些删除配置的脚本的时候,多次运行,如果没有意外出现的话,应该总是返回同一结果。请注意,问题不能扩大化。比如,在创建一些配置的时候,比如脚本script_addFiles的目的是为了创建3个目录和1个文件,那么脚本并不能简简单单地去检查文件是否存在,如果存在就删除,并且重新创建,最后输出true。因为,这里会有一个删除操作,非常的危险!正常的做法是,显示地输出需要创建的文件/目录已存在,退出运行,或者是与用户交互,然后re-try。

接下来,谈论更抽象一点的问题,如果输出比较友好的log。因为我们都知道,在脚本或者程序运行过程中,输出log是必要的,这是与用户交互的过程。如果不输出log,出错或者是有什么问题,用户是无从知晓,debug更是无从谈起。那么,如何保持输出的log是足够的友好呢?这里面有很多声音,有些人主张多输出,有些人主张是出错输出,有些人建议分不同的层次输出log (log level)。我觉得还是从log的功能入手,log的作用就是为了告诉用户,程序运行的当前状态。所以从这一点出发,一个足够友好,但不烦人的log应该具有以下特征:

1. 告诉用户当前运行的状态,即我在运行,你不要着急,可以去先喝杯咖啡~

2. 报忧不报喜:运行一开始就告诉用户一份完整的log的路径,以便查看或者是出错debug。但,在屏幕上,尽可能的不要输出,除非是出错了。

3. 运行结束,告诉用户运行的结果,并且再次附上完整log的路径,因为有可能是比较长的运行,导致之前的log被冲掉了。

所以,我主张的log输出策略很简单,一份完整的log存在该放置log的地方,运行中输出给用户看的log要尽可能的简洁扼要!

该怎么输出log?!相关推荐

  1. adb logcat命令查看并过滤android输出log

    adb logcat命令查看并过滤android输出log cmd命令行中使用adb logcat命令查看android系统和应用的log,dos窗口按ctrl+c中断输出log记录. logcat日 ...

  2. Linux kernel 不输出log信息

    /********************************************************************************** Linux kernel 不输出 ...

  3. android输出log,Android开发 Release情况下也能输出log

    一般我们开发程序都是在debug模式下开发,打log很方便,什么log.v.log.d.log.i都热别好使,但是到了要发布时我们通常要打release版包,在release版下做测试也是必需的,为了 ...

  4. 【android9.0】system/core下的usbhost模块无法输出log到logcat

    2019独角兽企业重金招聘Python工程师标准>>> 现象:原生android9.0 sdk,system/core/libusbhost是usb模块用来和驱动通信的模块,在调试时 ...

  5. JSON.stringify() 格式化 输出log

    调试程序的过程中,我们打印一个日志: console.log(object);,其中object是任意的一个json对象. 在控制台就会看到[object object],而看不到具体的内容. 我们可 ...

  6. Shell Scipt 命令行带参数,输出log

    Shell Scipt 命令行带参数,输出log 命令行带参数,以及字符串参数放到ssh命令里可以这么放: #!/bin/bash        这行保证运行bash可以这样: ./data.sh i ...

  7. adb logcat 保存_adb logcat命令查看并过滤android输出log

    cmd命令行中使用adb logcat命令查看android系统和应用的log,dos窗口按ctrl+c中断输出log记录. logcat日志中的优先级/tag标记: android输出的每一条日志都 ...

  8. android log机制——输出log

    转自: http://my.oschina.net/wolfcs/blog/164624 android log系统. 在android Java code中输出log android系统有4种类型. ...

  9. php 如何输出log,php如何设置日志输出

    php设置日志输出的方法:使用php的写入文件函数,把数据写入到事先定义好的文件中,代码为[file_put_contents(file,data,mode,context)]. php设置日志输出的 ...

最新文章

  1. python资料库-Python对接六大主流数据库,只需三步
  2. javascript深入理解js闭包
  3. python数学建模可视化_数学建模之流程图和数据可视化
  4. celery 停止_celery 停止执行中 task
  5. md4c语言_docsify-demo/c-4操作系统.md at master · lvITStudy/docsify-demo · GitHub
  6. 如何用 R 语言的 Shiny 库编写 web 程序
  7. excel去重_提高数据处理效率的10个excel小技巧
  8. 首次在matable中安装libsvm碰到的问题和解决方法---- mxGetIr 已过时 错误
  9. SEGGER System View - J-Link Library not found
  10. 深度学习与PyTorch入门实战教程
  11. php 评论插件,typecho插件:TeComment评论增强插件
  12. 用质谱法定义 HLA-II 配体处理和结合规则可增强癌症表位预测
  13. Excel表格宏命令教学一:VBA入门
  14. java于网络:P2P聊天系统
  15. 在java中 数组是作为_2.在Java中,数组是作为____来处理的。
  16. 最近一直在被螺旋槽成型铣刀的计算折磨着
  17. 镁光nor flash 开源控制器调教记录
  18. 集合转换成数组的两种方法---toArray()和toArray(T[] a)
  19. trinity运行原理及常见报错(一)
  20. 完美解析解决java.sql.SQLException:Access denied for user ‘‘@‘localhost‘ (using password: NO)

热门文章

  1. Python求解啤酒问题(携程2016笔试题)
  2. CSS子元素居中(父元素宽高已知,子元素未知)
  3. Go 1.5交叉编译
  4. java.lang.ClassCastException:android.widget.Button cannot be cast to android.widget.ImageView
  5. WORD中插入的公式与文字对不齐——公式比文字高——文字比公式低
  6. 【转】php需要掌握的东西
  7. GitLab CTO:开源是打造优秀软件的核心
  8. cv::createTrackbar cv::threshold
  9. 第十三章——表和索引分区(2)——使用拆分删除和加载大数据
  10. Spring Boot快速注册服务脚本