重要的业务处理已经结束。在实际环境中,系统管理员或者高级用户要能理解INFO输出的信息并能很快的了解应用正在做什么。比如,一个和处理机票预订的系统,对每一张票要有且只有一条INFO信息描述 “[Who] booked ticket from [Where] to [Where]”。另外一种对INFO信息的定义是:记录显著改变应用状态的每一个action,比如:数据库更新、外部系统请求。
这个问题又可以细分成两种情况:一种是存在严重的问题但有应急措施(比如数据库不可用,使用Cache);第二种是潜在问题及建议(ATTENTION),比如生产环境的应用运行在Development模式下、管理控制台没有密码保护等。系统可以允许这种错误的存在,但必须及时做跟踪检查用户参数错误。可以使用warn日志级别来的情况,避免用户投诉时,无所适从。
没有系统可以忍受这个级别的问题的存在。比如:NPEs(空指针异常),数据库不可用,关键业务流程中断等等。
系统中发生了非常严重的问题,必须马上有人进行处理。
- 内部接口(用于被其他服务通过feign或ribbon调用的),统一抛出io.choerodon.core.exception.FeignException异常,抛出异常时状态码为500,方便接口调用端“感知”异常。
- 手动抛异常时应该把exception一块抛出,可以保留异常堆栈。
使用SLF4J中的API进行日志打印, 在一个对象中通常只使用一个Logger对象,Logger应该是static final的. private static final Logger LOGGER= LoggerFactory.getLogger(Abc.class);
对trace/debug/info级别的日志输出,必须使用占位符的方式。
如果日志级别是 warn,上述日志不会打印,但是会执行字符串拼接操作,如果 symbol是对象,会执行 toString()方法,浪费了系统资源,执行了上述操作,最终日志却没有打印。所以应该使用:
不允许出现System print(包括System.out.println和System.error.println)语句。
不允许出现printStackTrace。堆栈打印应该
- 将放入 src/main/resources/ 中。