关于日志使用的思考

背景:

近期工作主要以测试解析程序生成的前端代码,并排查修复相关问题为主,在解决问题的过程中时常需要输出日志来辅助判断,因此思考总结了日志如何正确使用等问题,延申学习了日志框架相关的设计模式——门面模式。

内容:

为什么需要输出日志?

日志的主要目的是为了监测系统状态、方便测试、方便排查问题。当测试时遇到和预计不符的情况,看日志是解决问题的最常用手段。很多监控系统都是通过监控日志来预警,很多线上问题通过日志来排查,很多测试人员依靠日志来辅助测试。

应该在哪些位置输出日志、输出哪些信息?

1.用切面或Filter在Controller层做切面来打印调用的参数、返回值和响应时间以及捕捉和打印异常日志
2.在依赖的三方接口的参数、返回值和异常处打印日志
3.在接收消息的地方打印日志
4.在定时任务的开始和结束的地方
5.在异步任务的开始和结束的地方
6.面向测试打印日志,即提供核心函数的日志
在以上6个位置输出日志,日志包含参数、返回值、异常信息,将大大方便我们排查定位问题、解决问题。

为什么应该使用日志架构SLF4J中的API?

SLF4J应用了门面模式,自然拥有了门面模式的设计优点。使用SLF4J编写代码,开发人员不需要关注不同的日志架构的差异,因为各日志框架会对SLF4J去做适配。由于没有具体依赖某个日志架构,如果系统出于安全、性能等原因想更换另外一个日志架构就很容易。
这里发现门面模式与代理有一定的相似度,具体分析下它们之间的异同:
门面模式与代理模式的相同点是都引入了中介类或对象,中介都引用并把功能委托给了原对象,二者都起到了“代理“的功能。不同点是代理侧重于对原类对象的访问控制或功能增强,代理与原类对象具有相同的抽象(实现相同接口或直接继承原类),代理一般只代理一个类;门面侧重于功能整合,比如多个小系统的对象功能整合成一个功能丰富的大对象,门面可以与原类对象具有不同的抽象,门面代理的是一系列的类或对象功能。
门面的本质思想是化零为整。

输出日志有哪些不推荐的做法?

1.不要使用字符串字面量进行拼接
2.不要用System.out.println代替日志框架
3.不要打印敏感信息,如果需要打印可以考虑对敏感信息脱敏处理
4.除非业务需要,尽量不要打印大文本 。如果要打印可以提取少数关键信息。
以上4点不推荐的做法主要出于对性能和安全的考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值