不要弄乱Java代码中的日志,这是打印日志的正确姿势!

本文的来源:http://t.cn/E9BkD7a使用slf4j使用立面模式的日志框架,这有利于维护和统一实现各种类型的日志处理方法。

统一使用:什么时候才是登录Logback框架的正确方法?遇到问题时,只能通过调试功能确定问题。

您应该考虑记录。

一个好的系统可以通过日志确定问题所在。

当遇到if ... else或switch之类的分支时,应在该分支的第一行上打印一条日志,以确定您已进入哪个分支,并且经常以功能为核心进行开发。

在提交代码之前,您应确保可以使用该日志。

为了查看整个过程的基本格式,必须使用参数化信息:logger.debug(“处理交易,ID:[{}]和符号:[{}],ID,符号);对于调试日志,您必须确定是否仅在调试级别之后使用它:if(logger.isDebugEnabled()){logger.debug(“处理ID为:“ + id +”的交易”符号:“ +符号);}不要使用字符串拼接,它会产生很多String对象,它们会占用空间并影响性能。

反例(请勿这样做):logger.debug(“处理ID为:“ + ID +”符号:“ +”符号的交易);使用[]进行参数变量隔离。

如果存在参数变量,则应按以下方式编写它们:logger.debug(“以id:[{}]和符号:[{}]”,id,符号处理交易);此格式更具可读性,对于故障排除更有用。

使用不同级别的错误:基本概念影响程序的正常运行和当前请求的异常情况:无法打开配置文件所有第三方对接异常(包括第三方返回错误代码)所有影响函数的使用,包括:SQLException和业务异常除外的所有异常(RuntimeException和Exception)都不应发生:例如,如果要使用Azure上传图片,但是Azure不响应,如果存在Throwable信息,则需要记录完成的堆栈信息:log.error(“获取用户” [{}]”的用户信息中有一个错误,用户名,e);这意味着如果引发异常,请不要记录错误日志,最终处理器将处理该错误日志:反例(不要这样做):try {...。

} catch(Exception ex){String errorMessage = String.format(“读取用户[%s]信息时出错”,用户名); logger.error(errorMessage,ex);不会出现WARN的基本概念,但不影响程序的正常运行,当前请求的异常情况:存在容错机制时的错误情况配置文件,但是当配置文件即将达到临界值时,系统可以自动创建配置文件,例如:缓冲池占用达到警告行业务异常记录,例如:接口抛出业务异常时,应当记录此异常INFO:Service方法中系统/业务状态更改的基本概念系统操作信息,主要逻辑中的逐步外部接口,当某些客户端请求参数(REST / WS)调用a时,调用参数和调用结果的说明第三方1.并非所有服务都记录在入口和出口处,并且单一,简单的服务是没有意义的(除了工作,重新工作需要记录开始和结束,)。

反例(请勿执行此操作):公共列表listByBaseType(Integer baseTypeId){log.info(“ Start query base”); BaseExample ex = new BaseExample(); BaseExample.Criteria ctr = ex.createCriteria(); ctr.andIsDeleteEqualTo(IsDelete .USE.getValue()); Optionals.doIfP​​resent(baseTypeId,ctr :: andBaseTypeIdEqualTo); log.info(“查询基础的结尾”);返回baseRepository.selectByExample(ex);} 2。

对于复杂的业务逻辑,需要完成日志管理以及掩埋点记录,例如电子商务系统中的订单放置逻辑以及OrderAction操作(业务状态更改)。

3.对于整个系统(REST / WS)提供的接口,请使用info记录输入参数。

4.如果所有服务都是SOA体系结构,则可以将其视为外部接口提供程序,然后必须记录输入参数。

5.调用其他第三方服务时,必须记录所有输入和输入参数(因为很难跟踪第三方模块的问题)。

DEBUG的基本概念可以填写您想知道的所有相关信息(但不能代表您可以自由编写它。

调试信息应该有意义,最好带有相关参数。

)生产环境需要关闭DEBUG信息。

如果您需要打开