小白入门学习打日志

客户端打点日志 简单客户端打点日志,获取C#方法设置参数 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 立即下载

前言

只有光头才能变强。

文本已收录至我的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();的话,打印在控制的信息分析不方便:

640?wx_fmt=png
打印在控制的信息分析不方便

而我们将信息分等级和时间记录在服务器的磁盘上,有问题了就可以根据对应的信息去查找相关的日志(这样排查起来是十分方便的):

640?wx_fmt=png
服务器上的日志信息

我们再来看一下一般的日志长什么样的:

640?wx_fmt=png
日志长的是什么样的

例如:现在有人来反馈某某某用户好像收不到短信,给出发送时间和用户ID,我们就可以在日志上找出该用户在我们系统的发送状态(例如图上的:state:81,我们就认为是发送成功状态)

那么,问题来了,我们在哪打日志?《手册》上其实已经给出了答案:

谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使

用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘

撑爆,并记得及时删除这些观察日志。

大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请思考:这些

日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处?

1.1什么叫做 打点 ?

打日志最常见的就是用来打印出程序执行时的相关信息,用于快速定位问题和排查问题。我一开始也是这么理解的,但是其实还可以延伸一下。

我现在搞的那个系统,我们还使用日志在系统的执行链路上打点。比如说,我现在要推送一条通知消息,通知消息其实就是下面这种:

640?wx_fmt=png
这就是通知消息

这个过程大概是如此的:

  • 首先别人调用我的RPC提供的接口(或者我自己调用自己的接口),发现这是一个通知消息。于是我组装成对应的Task,异步放到消息队列中

  • 另一个系统从消息队列中取出Task,对这个Task进行业务的处理(比如说是否夜间屏蔽,是否强制发送等等),然后调用HTTP接口把这个Task交给下游

  • 下游做的事其实也很多,整块链路很长(比如要调用SDK的库,Android和IOS又做不同的处理)

640?wx_fmt=png
整块链路

而我们又希望在推送完了之后能统计出一些指标(曝光量,点击率,转化率)等等。于是乎,就需要在一些关键的位置上打一个日志(专业点叫做打点)

在整块链路都打通了以后,将这些点位(日志)收集起来,放到实时流式处理平台(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

推荐阅读:

640?wx_fmt=jpeg


200多篇 原创 技术文章 海量视频资源 精美脑图 面试题

长按扫码可关注获取 

欢迎关注640?wx_fmt=png点个再看640?wx_fmt=png

位置点位到达判断FC(Easy+Codesys+博途平台) IN rActPositon REAL 轴当前实际位置 1IN arAbsPosition REAL[10] 各工作点位坐标 2IN rDeadZone REAL 位置达到判断域值 范围 3OUT abInAbsPos BOOL[10] 到达各绝对定位点位标志 位置到达输出 4VAR i INT 循环计数 5VAR rErr REAL 位置偏差 6。 阅读详情

相关推荐

基于555定时器的呼吸灯电路

呼吸灯是指LED灯在芯片的控制下完成由亮到暗的逐渐变化,感觉就像人在呼吸,其广泛使用在手机上,起到一个通知提醒的作用。呼吸灯在许多灯光装饰上也有大量使用,如音响、汽车广告牌等,在生活中较为常见。...

qq1074237849的博客 9495

打点日志的一个实现

所谓打点日志,是指用于数据统计的日志,一般前端会有打点的方法,而后端也会有类似需求。按理说,后端的一般的日志也可以做到打点的效果,但是因为一般的日志离散,风格不统一,得到的日志格式不好,不容易切分统计,所以就会想要一个独立的打点日志来实现打点。 实现打点日志的方法 通过日志模版,增加一种类型的打点日志,则替换模版中的占位符,重新生成一遍日志的配置文件,之后热更新日志配置。 使用日志框架API...

lqadam的博客 1万+

SpringBoot 通过 JMS 集成 IBM MQ

IBM MQ 作为老牌的企业级消息中间件,虽然在当下云原生时代已不再是主流选择,但在金融、银行、保险等传统行业的核心业务系统中仍然占据着重要地位。这些行业对系统的稳定性、可靠性和事务一致性有着极高的要求,IBM MQ 正是在这些方面表现出色。尽管近年来 RabbitMQ、Apache Kafka 等新一代消息中间件在新兴项目中更受欢迎,但许多金融公司和大型企业仍在使用 IBM MQ 作为核心业务系统的消息传递基础设施。

小单的博客专栏 952

正确打日志的姿势

log4j slf4j logback

lixiaoxiong的专栏 971

Xilinx SDK工程编译、链接、调试注意事项

1、添加工程 启动SDK时选取workspace,如下图所示: 对应的workpace文件夹中会生成如下几个文件: 如果当前workspace是首次加载工程,SDK会进入启动界面 点击Import Project,导入已有工程 点击Browse,添加工程路径,一个完整的工程包含一个bsp文件夹,一个HW文件夹,和一个src文件夹(添加C功能函数) 点击Fini...

Autumn_He的博客 1万+

Kylin系统离线环境下的dpkg依赖包高效部署指南

本文详细介绍了在Kylin系统离线环境下高效部署dpkg依赖包的完整方案,包括预下载依赖包、构建本地APT仓库以及高级故障排查技巧。通过实战经验和优化建议,帮助用户解决依赖地狱问题,提升部署效率,特别适用于银河麒麟V10等内网环境。

weixin_29051245的博客 386

SpringBoot项目使用slf4j的MDC日志打点功能

物料准备:1.自定义1个线程MDC打点工具类2.配置logback打印MDC打点的traceId3.配置webMVC使用MDC打点4.配置ThreadPoolTaskExecutor使用MDC打点5.配置HttpClient使用MDC打点6.测试MDC日志打点效果 配置logback 输出的日志格式,要输出mdc里定义的traceId 配置webMVC使用MDC打点 定义MvcTraceInterceptor,来拦截http请求进行mdc打点 使用自定义的MvcTraceInterceptor 配置T

ThinkPet 1340

[系统安全] 三十二.恶意代码检测(2)常用技术详解及总结

前文从产业界和学术界分别详细讲解恶意代码攻击溯源的相关知识,在学术界方面,用类似于综述来介绍攻击追踪溯源的不同方法;在产业界方面,主要参考李东宏老师从企业恶意样本分析的角度介绍溯源工作。这篇文章将详细总结恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。希望这篇文章对您有所帮助,如果文章中存在错误、理解不到位或侵权的地方,还请告知作者与海涵。且看且珍惜,加油~

杨秀璋的专栏 1万+

Java异常面试题 2020面试必看

Java异常架构与异常关键字 Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪”抛出,异常信息回答了“为什么”会抛出。 Java异常架构 1. Throwable Throwable 是 Java 语言中所有错误与异常的超类。

乡村非主流2020的博客 1339

Python爬虫分析二手交易平台商品定价合理性:基于多维度数据挖掘与机器学习

本文针对二手交易平台商品定价合理性问题,设计并实现了一个基于Python的多技术融合爬虫系统,结合Scrapy框架、Selenium自动化测试工具、Anti-Scraping对抗技术以及机器学习算法,对国内主流二手交易平台(闲鱼、转转等)进行大规模数据采集与分析。系统实现了商品信息的多维度采集、价格合理性模型构建、可视化展示等功能,为二手商品买卖双方提供科学的定价参考。实验结果表明,该系统能够有效识别定价异常商品,准确率达到89.7%,具有较高的实用价值。关键词:Python爬虫;二手交易;定价分析;

2201_76125261的博客 297

精度0.01%决定续航多20km|新能源汽车研发测试:功率分析仪到底有多硬核?

新能源汽车测试、功率分析仪、电驱系统、效率MAP、谐波THD、GB/T18488、CLTC工况、三电测试、台架标定、能量流分析。中的核心作用,用公式、思维导图、实战金句与避坑指南,帮研发测试人员把准数据、提效率、降返工,看完就能落地用。点击关注,进公众号主页查看历史文章,**台架接线图、效率MAP模板、GB/T18488测试清单等。优化弱磁/调制策略,高效区占比提升5%,CLTC续航直接+8~20km。同样工况,两次数据差0.8%,报告根本没法交。结果:数据飘、定位慢、反复返工、认证不过。

优快云-新能源汽车研发测试专业博主 170

Java/异常处理

重点 异常继承结构图 异常语法的目的和原则 异常使用 NPE(NullPointerException)处理 简介 介绍 顶层类Throwable 错误Error:严重问题,不可恢复问题;JVM问题 异常Exception:轻度问题,可预测(编译异常),可恢复问题;程序问题 目的 java中出现异常处理语法的目的: 目的:处理应用程序中出现的问题让应用程序继续运行 因此:应用程序外部(HTTP/API)使用错误码,应用程序间使用Result 因此,异常不用来进行条件控制,流程控制 因此,异常应该

求道问术 1429

arkts编译报错-arkts-limited-stdlib错误【Bug已完美解决-鸿蒙开发】

在使用 Deveco Studio 4.0 beta2 开发应用时,报错。ERROR: ArkTS:ERROR File: D:/prRevivw/3792/applications_appsamg优快云o”见台难忘Usage of standardlibrary is restricted (arkts-limited-stdlib)这是 ArkTS 新增的语法规则。

一键难忘的博客 3778

SpringSecurity入门和架构的学习日志

Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员可以根据需要选择适合的方式。此外,Spring Security还提供了一些附加功能,如集成第三方身份验证提供商和单点登录,以及会话管理和密码编码等。

2401_87808951的博客 1216

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Node.js日志框架:Winston模块入门学习

转载:https://www.jianshu.com/p/1f61a9851780

leiyang11leiyang的博客 329

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

logback日志入门学习

logback日志入门学习说明依赖节点讲解控制台输出 默认情况下,Spring Boot会用logback来记录日志,并用INFO级别输出到控制台。这里记录下自己学习logback的笔记。 SpringBoot里面web依赖里面集成了logback日志和slf4j日志,默认是使用logback来打印日志。所以对于SpringBoot项目我们不需要额外再引入logback或者slf4j依赖。

weixin_48040732的博客 1640

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

linux学习日志,Linux系统入门学习:Linux中的日志

Linux中对于连接时间的日志,一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这两个文件无法直接使用cat查看,并且该文件由系统自动更新,我们可以通过w、who、finger、id、last、lastlog、ac命令进行查看。Linux中对于进程的监控日志,首先说进程监控日志在监控用户的操作指令是很有效的,当服务器最近发现经常发生无故宕机或者无故被人删除文件等现象...

weixin_28720767的博客 184

sprintBoot入门学习之日志

一,日志分为日志门面(日志的抽象层),和日志的实现,以SLF4J(日志门面),和Logback(SLF4J的实现类)为例 由于springBoot底层是spring框架,spring框架默认使用的是JCL(Jakarta Commons Logging) ,SpringBoot进行了封装,使用SLF4J和Logback, 二,SLF4J的使用,官方文档 1,如何在系统中使用SLF4J,日志记录的调用,不应该直接调用日志的实现类,而是调用日志抽象层的方法, import org.slf4j.Logger; i

weixin_42310074的博客 175

学习日志框架之——log4j2入门

Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。被誉为是目前最优秀的Java日志框架(没有之一)。

秃了也弱了 1659

学习模组日志:从入门到精通

今天,我们学习的是模组日志从入门到精通,更了解日志功能,当遇到疑难问题, 用业务日志无法定位问题原因的时候, 就需要抓取底层日志,交给技术同事分析问题。

weixin_72733760的博客 843

学习干货实战学习应急响应之Windows日志分析,网络安全零基础入门到精通教程!

本次环境将从大赛内与实战环境相结合去了解在应急响应中Windows日志分析的几个关键点,符合大赛及真实环境案例,本次环境将从WEB层面的日志分析到主机内的几种关键日志分析和重点功能进行排查。

A13531922962的博客 1222

日志入门学习

日志

小新的博客 2602

入门学习springboot日志(2)

学习目的目标仅为浅层次学习,能应用即可。发布仅供记录学习,本人小白,大佬见谅

qq_54769015的博客 362

Spring6学习技术|简要介绍+安装环境+入门案例+log4j2日志

碎碎念一下吧,javaWeb跟完了全程。还是感觉啥也不知道,啥也没学会。2025年春天能找到实习吗?真的好担心。

anncyuyan的博客 1610

MySQL入门学习-MySQL日志.查询日志

需要注意,在生产环境中,由于查询日志会记录大量信息,可能会影响服务器性能,因此不建议启用查询日志。最后,可以在查询日志的存储路径查看查询日志文件,了解执行的所有语句。错误日志记录的是 MySQL 服务器在运行过程中出现的错误信息,而查询日志记录的是客户端执行的所有语句。二进制日志记录的是对数据库进行修改操作的语句,而查询日志记录的是所有执行的语句,包括查询语句。通过分析查询日志,可以了解数据库的使用情况,找出执行效率低下的查询语句,进行优化。启用查询日志后,可以在指定的存储路径查看查询日志文件。

weixin_69763181的博客 696

小白入门Linux学习日志

这里写自定义目录标题系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据# 系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLow

julipower的博客 223
上一篇: 最近学到的前后端分离知识
下一篇: 公众号所有的文章导航(8-15更新)
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值