sqlserver 事务日志 异常增长原因排查_小白入门学习打日志
前言
只有光头才能变强。
文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y
记得之前写过一篇:《阿里巴巴 Java开发手册》读后感,之前自学时由于没怎么接触过打“日志”,所以《手册》中的“日志规约”我就先放一边去了。
而之前写了一篇:在公司做的项目和自己在学校做的有什么区别?中就有提到:公司的项目不会有e.printStackTrace();
这种代码的存在。因为这打印出来的错误信息没有日期、等级等等,分析起来不方便。
在工作中去服务器上查日志又是一个非常非常常见的操作,所以当初我又写了一篇 工作中常用到的Linux命令,里边就谈到了查日志时常用的Linux命令。
想着,既然接触日志也有一段时间了,不妨在回看《手册》,看看有什么要注意的地方,于是就有了这篇笔记。
一、Java打日志的基础
以前自己自学的时候,排查问题只会写下面的代码:
try { // doSomething} catch (Exception e) { e.printStackTrace();}----------// 查看某个数据的值时:System.out.println(xxxx);
去到公司就发现上面的代码全不见了,剩下的是:
LOGGER.info("begin to run Java3y:{}", id);----LOGGER.error("excepiton occurs when run Java3y {}, exception{}", id, e.toString());
如果使用e.printStackTrace();
的话,打印在控制的信息分析不方便:
而我们将信息分等级和时间记录在服务器的磁盘上,有问题了就可以根据对应的信息去查找相关的日志(这样排查起来是十分方便的):
我们再来看一下一般的日志长什么样的:
例如:现在有人来反馈某某某用户好像收不到短信,给出发送时间和用户ID,我们就可以在日志上找出该用户在我们系统的发送状态(例如图上的:state:81,我们就认为是发送成功状态)
那么,问题来了,我们在哪打日志?《手册》上其实已经给出了答案:
谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使
用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘
撑爆,并记得及时删除这些观察日志。
大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请思考:这些
日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处?
1.1什么叫做 打点 ?
打日志最常见的就是用来打印出程序执行时的相关信息,用于快速定位问题和排查问题。我一开始也是这么理解的,但是其实还可以延伸一下。
我现在搞的那个系统,我们还使用日志在系统的执行链路上打点。比如说,我现在要推送一条通知消息,通知消息其实就是下面这种:
这个过程大概是如此的:
首先别人调用我的RPC提供的接口(或者我自己调用自己的接口),发现这是一个通知消息。于是我组装成对应的Task,异步放到消息队列中
另一个系统从消息队列中取出Task,对这个Task进行业务的处理(比如说是否夜间屏蔽,是否强制发送等等),然后调用HTTP接口把这个Task交给下游
下游做的事其实也很多,整块链路很长(比如要调用SDK的库,Android和IOS又做不同的处理)
而我们又希望在推送完了之后能统计出一些指标(曝光量,点击率,转化率)等等。于是乎,就需要在一些关键的位置上打一个日志(专业点叫做打点)
在整块链路都打通了以后,将这些点位(日志)收集起来,放到实时流式处理平台(storm/flink)上清洗/过滤。如果是实时需要用到的放到Redis,离线的放在Hive。
二、手册规范
2.1 使用门面模式的日志框架
【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架
SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
门面模式我之前也写过一篇笔记:三分钟学会门面模式!
其实说白了就是希望抽象出一层API,能够在切换具体日志框架的时候不需要大面积更改。
这个我们可以按学JDBC的时候去理解:
无论我是接入MySQL、Oracle还是SQL Server,但我的接口永远都是那一套,切换数据库时不需要更改我的Java API
看了一下公司的项目,采用的是SLF4J+Logback
2.2 调用RPC接口使用Throwable类拦截
【强制】在调用 RPC、二方包、或动态生成类的相关方法时,捕捉异常必须使用 Throwable
类来进行拦截。
之前在排查问题的时候,有个问题死活排不出来,DeBug的时候一直没进catch模块。后来我学长就说:“要不你改成Throwable试试?
try {
} catch (Throwable e) {
}
我就很疑问,说:“为啥要改成Throwable呢?我们用Exception不就可以捕获所有的异常了么,Exception是Throwable的一个子类,但Exception已经是包含所有的Java异常了呀”
众所周知,Throwable有两个子类:
Error(一般我们都会把这个忽略掉…一般情况下出现了Error程序都运行不起来)
Exception
The Throwable class is the superclass of all errors and exceptions in the Java language
在《手册》上也有对上面的规则进行说明:
说明:通过反射机制来调用方法,如果找不到方法,抛出 NoSuchMethodException。什么情况会抛出
NoSuchMethodError 呢?二方包在类冲突时,仲裁机制可能导致引入非预期的版本使类的方法签名不匹
配,或者在字节码修改框架(比如:ASM)动态创建或修改类时,修改了相应的方法签名。这些情况,即
使代码编译期是正确的,但在代码运行期时,会抛出 NoSuchMethodError。
大概的意思就是说:调用 RPC、二方包、或动态生成类的相关方法时,可能直接抛出的是Error,而catch Exception是无法捕获得到的。
想看例子的同学可以看看这篇文章:
https://zhuanlan.zhihu.com/p/57950399
最后
这篇文章好像有点短…
参考资料(阿里巴巴开发手册下载地址):
https://github.com/alibaba/p3c
查阅资料时发现的好文:
https://www.cnblogs.com/chenhongliang/p/5312517.html
https://www.cnblogs.com/crazyacking/p/5456347.html
推荐阅读:
记一次愚蠢的操作--线程安全问题
最近学到的前后端分离知识
在工作中常用到的SQL
Github上有哪些Java面试/学习相关的仓库推荐?
工作中常用到的Linux命令
在公司做的项目和自己在学校做的有什么区别?
目录|Java3y最全目录
200多篇原创技术文章海量视频资源精美脑图面试题
长按扫码可关注获取
欢迎关注点个再看
sqlserver 事务日志 异常增长原因排查_小白入门学习打日志相关推荐
- 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历
摘要:华为云数据库GaussDB(for Cassandra) 是一款基于计算存储分离架构,兼容Cassandra生态的云原生NoSQL数据库:它依靠共享存储池实现了强一致,保证数据的安全可靠. 本文 ...
- ESP Wi-Fi 连接异常断开原因排查分析
此篇博客用来分析 ESP Wi-Fi 连接异常断开的现象. 1 Wi-Fi 连接的过程 以下是一段 Wi-Fi 顺利连接过程的 log.其中可以清晰的看出 state 的转移(init-> au ...
- elementUI中el-table每行异常高度原因排查,累死
理论上不单独设置高度的话,表格每一个应该是默认的高度才对,我说的没错吧, 但是请看实际情况: 这是默认情况下的高度为48 还有两外一个表格,我也没有设置高度,但是但是:这个高度竟然达到了71,我真的是 ...
- 日志服务器搭建及配置_[ELK入门到实践笔记] 一、通过rsyslog搭建集中日志服务器...
ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,这是我在ELK学习和实践过程写下的笔记,整理成了一个ELK入门到实践的系列文章,分享出来与大家共勉.本文为该系列文章的第一篇,通 ...
- 有监督学习和无监督学习举例_监督学习入门学习笔记
以下内容引用:An Introduction to Machine Learning with Python by Andreas C. Müller and Sarah Guido (O'Reill ...
- Unreal虚幻_蓝图入门学习
UE4中文官网地址: 虚幻引擎 | 最强大的实时3D创作平台 - Unreal Engine UE4中文官方文档:https://docs.unrealengine.com/4.26/zh-CN/ht ...
- 楷书书法规则_硬笔书法入门学习“三步法”,让练字不再难
生活中,常常有人肯于吃苦,坚持经常练习硬笔书法,但却进步不大,收获甚微.因此,凡有志学好硬笔书法的人,必须掌握一些学习硬笔书法的方法.硬笔书法学习的方法可以采用"三步法". 一.规 ...
- python数据科学手册_小白入门Python数据科学
前言 本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据 ...
- python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...
前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...
最新文章
- 1035 插入与归并 (25 分)(c++)
- blink usb无线网卡驱动 linux,最新blink随身wifi驱动下载地址电脑版-CC软件
- Objective-c编程语言(三):对象,类,消息 ——消息
- 【VUE】限制输入特殊字符
- 简述线程,程序、进程的基本概念。以及他们之间关系是什么?
- pyspark 数据写入hive_Pyspark将数据写入hi
- 支付宝APP支付里设置应用网关和授权回调地址是不必填的
- Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
- Rayman的绝顶之路——Leetcode每日一题打卡1
- java mysql utc时间_Java项目统一UTC时间方案
- 全球水深地形模型ETOPO1
- linux系统与window区别,Linux和windows操作系统有哪些区别
- 技巧 | 如何画出漂亮的深度学习模型图
- mysql 经典操作_mysql常用经典操作
- javaWEB——主页面新闻展示删除查看修改主题绑定
- vue中js转换火星坐标以及真实坐标
- 北京市中 高英语听说计算机考,北京市教育委员会关于听力及言语障碍考生参加2019年中考英语听说计算机考试有关事项的通知...
- oracle设行宽 每次,解决每次从cmd进入sqlplus,都得重新设置pagesize、linesize的问题...
- 计算机毕业设计Python+djang公务员考试信息管理系统(源码+系统+mysql数据库+Lw文档)
- Unity3d 技巧(8) -PlayMaker 插件自定义扩展 不受局限
热门文章
- 老司机实战Windows Server Docker:5 Windows Server Dockerfile葵花宝典
- 在ThoughtWorks工作12年的技术主管,所总结的12条技术人经验
- C# 图片、文件等加入Project Resources
- TypeScript 3.9 正式发布!平均编译时长从 26 秒缩短至 10 秒
- 解决React Native报错:Error:Found unexpected optical bounds (red pixel)
- 统计百度网盘文件个数 V3
- Android Studio开发基础之启动Service,并通过从Activity向Service传递数据
- React Native之hardwareBackPress
- 汇编语言之标志寄存器
- 【C语言简单说】七:自定义函数(3)