温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java日志怎么理解

发布时间:2021-11-24 16:17:47 来源:亿速云 阅读:152 作者:iii 栏目:大数据

这篇文章主要介绍“java日志怎么理解”,在日常操作中,相信很多人在java日志怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java日志怎么理解”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

重要性

“无日志,不运维”。重要指数:最高级。

具备的特性

能快速、精准定位问题,日志要能显示出错误的原因。这句话非常重要,这是日志打印的指导思想。

分类

分类很重要,不同的功能,不同的业务需要不同的日志。分类越详细,越便于问题的定位。

日志的类型

从打印的日志类型进行划分,可以分为:控制台日志、文件日志、数据库日志、kafka+elk日志。这些是我目前接触过的。

控制台日志:用于简单代码的测试

文件日志、数据库日志:我是不推荐使用的,已经out了

kafka+elk日志:我目前接触最好的日志

@timestamp:是日志打印的时间

level:是日志的级别

loggerName:是创建logger时,传的class参数

message:是打印的日志

projectMarker:是我添加的,用于区分项目和环境的。通过本截图可以看出,此条日志是seal项目的正式环境日志。如果是“seal.test”表示是seal的测试环境。此功能只有我开发的框架“聚宝盆”才有。

source.class:是打印日志的类的全名称

source.line:是打印日志在类中的行号

source.method:是打印日志的方法名

级别

日志输出的优先级: debug < info < warn < error < fatal,info、warn、error是必须用到的。

info:正常信息的打印,为了方便排错、调试。

warn:可以忽略的错误。比如密码错误、session过期等。

error:不允许的错误。此错误会导致正常业务的进行。

层级

个人认为日志应该分为框架层级、业务层级、插件层级几个方面。

框架层级:项目使用的框架打印的日志。这类日志是为了从底层排查问题使用的(如果业务层不能排查)。一般是架构师搭建的。此类层级的日志非常重要,因为框架级别的日志具有普遍性、通用性等特点,框架打印了日志,业务层就不需要在写日志了,减少了业务开发的工作量。有的问题,需要底层的日志才能定位。

业务层级:主要打印业务相关的日志

插件层级:由于和第三方对接,需要引入第三方的jar等,抓取到的插件的日志。

返回码、描述、标准化

返回码:一般是三位数字,只能表示一个范围,不能精准定位问题

描述:是返回的描述信息,可以精准定位问题。但是现在有个错误的使用,这个描述本来是为了方便后端工程师定位问题的,前端工程师在做问题展示的时候,直接使用了,由于排查问题的描述和展示给客户的描述是不一样的,导致此描述不能精准定位问题了。如果需要使用后端的信息做展示,建议另创建个字段

标准化:这个非常重要,如果进行标准化处理,大家一眼就能判断问题出在哪里了。

下面这段代码是“聚宝盆”框架返回的标准属性,可供参考

@ApiModelProperty(value="返回码,200成功,其他为失败。页面通过返回码处理不同的业务")
private int returnCode = 200;
@ApiModelProperty(value="错误信息,此信息只能用于接口对接,排查错误,不能用于页面展示")
private String returnDesc = "成功";
@ApiModelProperty(value="前端显示的信息")
private String returnShow;

运行时间

运行时间的打印,是进行性能调优的一个非常重要的日志。因为太重要了,所以单列一个标题

日志的记录

如果能够理解日志打印的指导思想,我相信日志打印对你来说不是一件难事。

必须打印的日志

接口的入口处和返回处:入口需要打印传入的参数,返回处需要打印返回的信息。

调用接口的前后:调用接口前要打印请求的参数,调用接口后要打印请求的参数、返回的值,还要打印接口运行的时间。

错误的分支:每个异常的分支,都必须打印日志。if必须有slse,switch必须有default。见下图所示

/////////例子1/////////
if(){
//正常业务逻辑
}else{
//异常,此处必须有日志
}
////////例子2/////////
if(){
//异常,此处必须有日志
}
//正常业务逻辑
/////////////例子3/////////
switch (key) {
case value:
	//正常业务逻辑
	break;
...//正常业务逻辑
default:
    //异常,此处必须有日志
	break;
}

catch:如果程序异常了,必须捕获并打印日志

数据库:操作数据库的日志必须打印,包括执行的语句和传入的参数

可能出错的语句前面:如果执行的语句有报错的概率,一定要在前面打印入参,方便排错。

可选的日志

个人认为如果必须打印的日志都打印了,就完全可以满足排错的需要了。

到此,关于“java日志怎么理解”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI