前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编程技巧篇之特殊处理留痕迹

编程技巧篇之特殊处理留痕迹

作者头像
明明如月学长
发布2022-03-25 08:33:57
2540
发布2022-03-25 08:33:57
举报
文章被收录于专栏:明明如月的技术专栏

一、背景

在日常开发中需要有一些特殊处理的场景。

在这里插入图片描述
在这里插入图片描述

对于特殊处理的场景,建议留下标记,用来和正常的处理作区分。

二、举例

2.1 日志升级

为了方便排查问题,我们可以在 RPC 接口调用时,在上下文中传入某个标识符,如: debugToInfo = true 在日志工具类中,判断该标识,如果没有开启 DEBUG 级别,则提升为 INFO 级别。

参考伪代码如下:

代码语言:javascript
复制
public class LoggerUtil{

  public static void debug(Logger logger, String... messages){
     // 如果原本支持 debug 日志,还是按照 debug 级别暑促
	if(logger.isDebugEnable()){
	    logger.debug(messages);
	    return;
	}
	
	// 开启 debug 提升到 info 日志时,打印 info 级别日志
	if(ContextUtils.openDebugToInfo() && logger.isInfoEnable()){
 		logger.info(messages);
	    return;
    }
  }
}

日志示例:

DEBUG XX 业务,requst: xxx, result:yyy

为了标志特殊场景输出的日志,可以考虑将该情况的日志加上统一的前缀。

参考代码如下:

代码语言:javascript
复制
public class LoggerUtil{
private static final String DEBUG_TO_INFO_LOG_HEAD ="【Debug2Info】 ";

  public static void debug(Logger logger, String... messages){
     // 如果原本支持 debug 日志,还是按照 debug 级别暑促
	if(logger.isDebugEnable()){
	    logger.debug(messages);
	    return;
	}
	
	// 开启 debug 提升到 info 日志时,打印 info 级别日志
	if(ContextUtils.openDebugToInfo() && logger.isInfoEnable()){
 		logger.info(DEBUG_TO_INFO_LOG_HEAD,messages);
	    return;
    }
  }
}

日志示例:

INFO【Debug2Info】 XX 业务,requst: xxx, result:yyy

由于线上是 INFO 级别的日志,这个日志并不应该出现。 但我们看到 【Debug2Info】日志头时就很容易反映出来做了一些特殊处理。 这样可以清楚地知道这不是用户发起的请求,而是为了排查问题打印的日志。

2.2 属性标识

比如某个场景需要对一些推荐物品(直播、短视频、新闻、话题等)调用算法接口进行打分,由于某种特殊原因,某个投放物算法无法打分,需要临时通过代码对其中一类推荐物(如话题)随机打分。

代码语言:javascript
复制
items
// 过滤出话题的推荐物
.filter(ItemUtils::isTopic)
// t打分
.forEach(item -> item.setScore(RandomUtils.nextDouble(0,2)));

如果单纯这么处理,返回给前端的结果里 话题的数据和其他的数据打非常相似,单纯从结果里根本看不出是算法打分还是随机打分。

模拟示例如下:

代码语言:javascript
复制
[{"itemId":10086, "type":"video", score: 1.23}
,{"itemId":10088, "type":"video", score: 2.2}
,{"itemId":10288, "type":"topic", score: 1.4}
,{"itemId":10288, "type":"live", score: 1.024}
]

按照本文提到的原则,特殊处理留痕,我们可以加一些附加属性。

代码语言:javascript
复制
items
// 过滤出话题的推荐物
.filter(ItemUtils::isTopic)
// 附加属性标志特殊处理
.peek( item -> ItemUtils.setAttr(item,"randomScore", true))
// 随机打分
.forEach(item -> item.setScore(RandomUtils.nextDouble(0,2)));

模拟示例如下:

代码语言:javascript
复制
[{"itemId":10086, "type":"video", score: 1.23}
,{"itemId":10088, "type":"video", score: 2.2}
,{"itemId":10288, "type":"topic", score: 1.4, "attr":{"randomScore";true}}
,{"itemId":10288, "type":"live", score: 1.024}
]

这样就可以清楚地知道哪些推荐物做了特殊处理,后面去掉随机打分之后,该属性也不会再出现。

三、总结

对于需要特殊处理或者临时处理的场景下,尽量通过日志或者不影响正常业务的属性和常规数据标识出来,方便调试和排查问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/03/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、举例
    • 2.1 日志升级
      • 2.2 属性标识
      • 三、总结
      相关产品与服务
      云直播
      云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档