尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

2026年7月28日告警信息很多,但我不需理会

2026年7月28日告警信息很多,但我不需理会
📅 发布时间:2026/7/28 9:37:01

就在2026年7月28日的早上,也即是刚才,群里有很多的告警信息,但是我淡定的很,因为核心的业务,并没有告警。那我就知道,可以让团队的人上班后再看了。

这就是核心业务都有监控的好处,只要核心模块没有告警信息,你就可以放心了。

因为其他的业务模块有告警,不会出大事的,顶多是小问题。

我这边是在早期就做了一个规定,核心模块一定要监控好,一出事必须马上知道。

而我采用的方式就是,一个核心模块一个钉钉监控群。比如:

  • 订单的一个告警群;
  • 库存的一个告警群;

并通过规范化日志打印,方便监控。我这边的日志,必须是规范化的。因此我提供了一个结构化的日志打印工具,代码超级短:

importcom.alibaba.fastjson2.JSON;importlombok.extern.slf4j.Slf4j;importorg.slf4j.Logger;importjava.util.LinkedHashMap;importjava.util.Map;/** * 结构化日志工具类 * * 使用示例: * // 方式1:传入logger(推荐,类名正确) * StructuredLog.info(log) * .userId("123") * .shopId(456) * .log(); * * // 方式2:不传logger(简便,类名为StructuredLog) * StructuredLog.info() * .userId("123") * .shopId(456) * .log(); * * @author linsongbin */@Slf4jpublicclassStructuredLog{privatefinalMap<String,Object>fields=newLinkedHashMap<>();privatefinalLogLevellevel;privatefinalLoggerlogger;privateStringmessage;privateThrowablethrowable;privateenumLogLevel{INFO,WARN,ERROR,DEBUG}privateStructuredLog(LogLevellevel,Loggerlogger){this.level=level;this.logger=logger;}/** * 创建INFO级别日志(使用调用方logger) */publicstaticStructuredLoginfo(Loggerlogger){returnnewStructuredLog(LogLevel.INFO,logger);}/** * 创建INFO级别日志(使用StructuredLog内置logger) */publicstaticStructuredLoginfo(){returnnewStructuredLog(LogLevel.INFO,log);}/** * 创建WARN级别日志(使用调用方logger) */publicstaticStructuredLogwarn(Loggerlogger){returnnewStructuredLog(LogLevel.WARN,logger);}/** * 创建WARN级别日志(使用StructuredLog内置logger) */publicstaticStructuredLogwarn(){returnnewStructuredLog(LogLevel.WARN,log);}/** * 创建ERROR级别日志(使用调用方logger) */publicstaticStructuredLogerror(Loggerlogger){returnnewStructuredLog(LogLevel.ERROR,logger);}/** * 创建ERROR级别日志(使用StructuredLog内置logger) */publicstaticStructuredLogerror(){returnnewStructuredLog(LogLevel.ERROR,log);}/** * 创建DEBUG级别日志(使用调用方logger) */publicstaticStructuredLogdebug(Loggerlogger){returnnewStructuredLog(LogLevel.DEBUG,logger);}/** * 创建DEBUG级别日志(使用StructuredLog内置logger) */publicstaticStructuredLogdebug(){returnnewStructuredLog(LogLevel.DEBUG,log);}/** * 设置日志消息 */publicStructuredLogmessage(Stringmessage){this.message=message;returnthis;}/** * 设置异常信息 */publicStructuredLogexception(Throwablethrowable){this.throwable=throwable;returnthis;}/** * 通用的键值对设置方法 */publicStructuredLogput(Stringkey,Objectvalue){if(key!=null&&value!=null){fields.put(key,value);}returnthis;}// ============ 业务字段快捷方法 ============/** * 用户ID */publicStructuredLoguserId(StringuserId){returnput("userId",userId);}/** * 用户名称 */publicStructuredLoguserName(StringuserName){returnput("userName",userName);}/** * 门店ID */publicStructuredLogshopId(IntegershopId){returnput("shopId",shopId);}/** * 门店名称 */publicStructuredLogshopName(StringshopName){returnput("shopName",shopName);}/** * 单据ID */publicStructuredLogdocsId(LongdocsId){returnput("docsId",docsId);}/** * 单据编号 */publicStructuredLogdocsNo(StringdocsNo){returnput("docsNo",docsNo);}/** * 模块编码 */publicStructuredLogmoduleCode(StringmoduleCode){returnput("moduleCode",moduleCode);}/** * 模块名称 */publicStructuredLogmoduleName(StringmoduleName){returnput("moduleName",moduleName);}/** * 事件编码 */publicStructuredLogeventCode(StringeventCode){returnput("eventCode",eventCode);}/** * 事件名称 */publicStructuredLogeventName(StringeventName){returnput("eventName",eventName);}/** * 业务场景 */publicStructuredLogscenario(Stringscenario){returnput("scenario",scenario);}/** * 状态(如: success/fail/processing) */publicStructuredLogstatus(Stringstatus){returnput("status",status);}/** * 数量(如: 记录数/处理数/失败数) */publicStructuredLogcount(Integercount){returnput("count",count);}/** * 耗时(单位: 毫秒) */publicStructuredLogcostTime(LongcostTime){returnput("costTime",costTime);}/** * 输出日志 */publicvoidlog(){StringlogContent=buildLogContent();switch(level){caseINFO:if(throwable!=null){logger.info(logContent,throwable);}else{logger.info(logContent);}break;caseWARN:if(throwable!=null){logger.warn(logContent,throwable);}else{logger.warn(logContent);}break;caseERROR:if(throwable!=null){logger.error(logContent,throwable);}else{logger.error(logContent);}break;caseDEBUG:if(throwable!=null){logger.debug(logContent,throwable);}else{logger.debug(logContent);}break;}}/** * 构建日志内容 */privateStringbuildLogContent(){StringBuildersb=newStringBuilder();if(message!=null&&!message.isEmpty()){sb.append(message).append(" || ");}// 使用JSON格式输出,便于日志平台解析sb.append(JSON.toJSONString(fields));returnsb.toString();}}

使用的时候,也很简单:

StructuredLog.error(log).message("门店过时未下单").exception(e).scenario("系统自动下单").moduleCode("order").moduleName("订货单").eventCode("autoCreateOrder").eventName("系统自动下单").shopName("xxx门店").docsNo(docsNo).put("shopId",1).log();

这个结构化工具是有模块编码的,专门用于监控的。一旦某个关键字模块出现了error日志。我这边对应的钉钉群,就会有告警信息。

这个日志结构化工具类,你可以直接拿去用,我已经用了它,用了三年了,很实用的。

在这里我想告诉大家几件事:

第一,如果你是技术组长/技术经理/技术负责人的,一定要做到一件事情,核心模块实时监控到位,有问题,马上处理,降低损失,否则,你可能位置不保;

第二,日志打印一定要结构化,不要让团队的人随意乱打;

第三,不要使用一个统一的监控大群,而是分模块。也即是,一个核心模块,一个告警群;

程序员保护自己,从实时监控开始。

相关新闻

  • SymPy Gamma核心组件揭秘:diffsteps与intsteps如何实现分步计算可视化?
  • 江门人黄金变现福音!2026本地阳光鉴定体系落地,6家靠谱回收门店全公开 - 观金堂黄金回收
  • Java队列实现与应用全解析

最新新闻

  • NBM7100A芯片在物联网设备中的电源管理优化方案
  • Zookeeper--08---zk实现分布式锁、案例
  • 2026长沙出售翡翠手镯好不好选易奢福,1公里1家门店,7区全覆盖 - 奢侈品回收实体店
  • Gemini 3.6 Flash多智能体框架在游戏设计中的实战应用
  • 2026年河南ODI备案三大误区与合规破局之道 - 万相科技
  • 基于mykernel 2.0的操作系统开发:大学生必学的内核编程实战项目

日新闻

  • 力旷智能:伺服驱动系统在制药收瓶设备中的应用解析
  • 2026 网安入门避坑指南,零基础如何避开无效学习直接上手实战
  • 揭秘CFC项目:如何通过手机摄像头实现850kbps无网络文件传输

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号