这篇文章主要介绍“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日志怎么理解”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
当前标题:java日志怎么理解
链接地址:http://scgulin.cn/article/gsipoj.html