网购
点击蓝字,关注我们
大家好,我是一名大厂全栈工程师,擅长Java后端,Vue前端,小程序编程,Python编程,AIGC等技术。我会分享一些相关的知识干货,以及互联网一些热点话题,感兴趣的话就关注我吧,希望对你有所帮助
01
某外包程序员,只因为日志打印不规范,而被甲方领导追着骂了一天。大家会不会觉得很荒谬呢?
在我们看来,日志不过是用来定位问题的工具而已,并不会影响到业务逻辑的正确性,没有必要那么关注,而且哪里打印日志哪里不打印日志,也基本全凭程序员的经验来判断。
比如我们通常在判断分支里面打印日志,能够知道实际有没有走进这个分支。或者在一些报错或者异常捕获出打印日志,能够知道因为什么原因报错或异常。
这名程序员肯定想不到,自己随手打印的一行日志,日后居然会给自己埋下祸根,成为领导痛骂自己的原因。不过马上就有人猜出来了,肯定是打印了一些敏感的信息。
要知道,在华为隐私保护方面的要求非常严格,会有专门的安全团队,主要任务就是定期稽核各个业务线产品,利用工具和人工排查相结合的方式进行全方位检查,包括所有日常运作的规范性,接口安全性和权限控制,数据库中是否有明文存储隐私信息,各种加密算法是否安全,使用的开源软件是否有漏洞等等。甚至会具体到每一行代码。
如果稽查一旦发现问题,不仅会责令整改,还会对整个团队的绩效产生影响,所以领导们对内部安全稽查都非常重视,重要程度甚至高于业务需求,会专门安排项目组的人负责做安全相关工作,并且定期扫描和排查。
而楼主的这次日志打印问题,估计就是通过工具扫码日志,发现打印了一些用户敏感信息在里面,比如用户姓名,手机号,地址,邮箱等等都属于个人隐私,不允许打印,也不允许明文保存在数据库中,需要加密后保存。
不过在华为,这些隐私数据不允许打印肯定是宣传和学习过的,那么为什么还会出现这种问题呢?个人猜测,楼主应该是将一个对象以JSON字符串的格式直接全部打印了出来, 而忽略了这个对象中存在个人隐私数据。
02
日志打印的规范有哪些呢?我相信不同的公司,都有不同的规范,不过有几条应该是都有的。
首先就是日志打印的基本原则:
1、隔离性,日志的打印是不能够影响到系统正常运行的。
2、安全性,日志打印不能出现漏洞,比如前段时间出现的log4j漏洞,就影响到了非常多的软件。
3、数据安全,日志打印要遵守数据安全,不能够打印一些隐私信息,机密信息等。
4、可读性,日志打印的目的就是为了排查问题,所以日志要包含一些业务主键,同时打印的日志可读,通过日志可以定位到问题所在。
除了这些基本原则之外,还有一些比较通用的日志打印规范:
1、要区分日志等级,debug,info,warn,error。对于trace/debug/info级别的日志输出,要进行日志级别的开关判断。
2、日志打印不允许失败,更不能阻碍线程,而最容易犯的错误就是日志打印时出现了空指针。
3、捕获异常后不要使用e.printStackTrace()打印日志,这是因为如果堆栈信息太多,字符串常量池所在的内存块没有空间了,即内存满了,系统请求将被阻塞。可以直接打印e来获得堆栈和详细信息。
4、避免在循环体内打印日志。
5、禁止使用JSON序列化工具将对象整个打印,首先如果对象内get方法被覆写,会导致序列化失败,直接抛出异常。其次,序列化动作会消耗性能,还会产生中间对象占用内存。还有,如果对象过大,将会导致日志打印过多,占用磁盘,还会影响到问题定位。最后,如果对象中存在隐私字段,全部打印还会有安全问题。
日志打印也绝非小事,日常工作中还是要多加谨慎,如果因为日志打印不规范而被领导骂,那也太不值得了。
热门推荐
💗 互联网公司年终奖发放时间爆料,华为遥遥领先
💗 某新员工大量使用Lambda表达式,却被老员工喷是屎山
💗 某程序员使用vim查看生产文件,遭到甲方臭骂,原因竟是这...
程序员修炼
长按识别二维码,关注我们
程序员修炼的不止技术