1、Web层日志规范(同RPC接口)
1.1、Controller层方法开始日志
当调用controller层方法时,只打印进入此方法的标识,并不打印入参。如:
public InvokeResult<List<VTLModelDTO>> getAllVTLModelDTOByMakeId(VTLModelDTO vtlModelDTO) {
// 只打印开始标识
LOGGER.info(" getAllVTLModelDTOByMakeId() begin.");
···
}
1.2、Controller层方法结束日志
1.2.1、返回正常
controller层方法调用service层逻辑,当后者逻辑处理正常时(不抛出异常),直接打印end,若有异常,则打印failed,不打印end。如:
public InvokeResult<List<VTLModelDTO>> getAllVTLModelDTOByMakeId(VTLModelDTO vtlModelDTO) {
···
// 指定的封装返回对象
InvokeResult<List<VTLModelDTO>> result = new InvokeResult<List<VTLModelDTO>>();
···
try {
···
// 当逻辑处理没问题,则打印end
LOGGER.info(" getAllVTLModelDTOByMakeId() end.");
} catch (···) {
···
}
···
}
1.2.2、返回异常
当controller层调用service层逻辑出错时,打印错误failed与异常信息,不打印end,返回来自service层错误信息。如:
public InvokeResult<List<VTLModelDTO>> getAllVTLModelDTOByMakeId(VTLModelDTO vtlModelDTO) {
···
// 指定的封装返回对象
InvokeResult<List<VTLModelDTO>> result = new InvokeResult<List<VTLModelDTO>>();
···
// 当逻辑处理没问题,打印成功标识
try {
···
} catch (BzException e) {
// 返回失败标识,错误信息为service层抛出来的异常
LOGGER.error(" getAllVTLModelDTOByMakeId() failed. e : [{}].", e);
result.failure(e.getMessage());
}
···
}
2、Service层日志规范
2.1、Service层方法开始日志
原则上进入方法时只打印服务于本方法逻辑的参数(如:查询方法传入某对象,查询条件只用得到id,那么就不用将name字段打印出来)。如:
public List<VTLModelDTO> getAllVTLModelDTOByMakeId(VTLModelDTO vtlModelDTO) {
/*1、只打印此方法的查询条件makeId;
*2、为避免魔法值,将makeId置为static。
*/
LOGGER.info(" getAllVTLModelDTOByMakeId() begin. arg data : [{}]",
VTLJsonObjectUtils.objectToJsonWithContains(vtlModelDTO,
VTLModelDTO.class, VTLModelLogArrayDTO.MAKE_ID));
···
}
public Page<VTLModelDTO> pageQueryForModelDTO(VTLModelDTO vtlModelDTO) {
/*
*此方法为分页查询所有车系数据,只需要current和rowCount两个参数
*/
LOGGER.info(" pageQueryForModelDTO() begin. current : [{}], rowCount : [{}].",
vtlModelDTO.getCurrent(),vtlModelDTO.getRowCount());
···
}
2.2、Service层方法校验日志
2.2.1、入参校验日志
对入参进行“空指针”等校验,若不符合条件,则打印错误并抛出异常。
public List<VTLModelDTO> getAllVTLModelDTOByMakeId(VTLModelDTO vtlModelDTO) {
···
// 判断入参是否为空,若不为空,则判断该方法用到的字段是否符合使用条件
if (null == vtlModelDTO || StringUtils.isBlank(vtlModelDTO.getMakeId())) {
LOGGER.error(" getAllVTOModelDTOByMakeId() end. arg is not valid.");
throw new BzException(" 编号为空!");
}
···
}
2.2.2、用户权限校验日志
对操作用户进行“权限”等校验,若不符合条件,则打印错误并抛出异常。
public List<VTLModelDTO> getAllVTLModelDTOByMakeId(VTLModelDTO vtlModelDTO) {
···
// 判断用户权限
YxCurrentUserDTO yxCurrentUserDTO = vtlModelDTO.getCurrentUser();
currentUserUtils.checkAndInitPermission(yxCurrentUserDTO);
if (null == yxCurrentUserDTO) {
LOGGER.warn(" getAllVTLModelDTOByMakeId() end. user permission refused. ");
throw new BzException(" 该用户无此权限! ");
}
···
}
2.3、Service层方法结束日志
2.3.1、返回正常
若查询结果为某种集合(如:List,Set),则只打印集合内元素数量。
public List<VTLModelDTO> getAllVTLModelDTOByMakeId(VTLModelDTO vtlModelDTO) {
···
List<VTLModelDTO> vtlModelDTOList = new ArrayList<VTLModelDTO>();
···
// 只打印list内元素数量
LOGGER.info(" getAllVTOModelDTOByMakeId() end. Count of return data : [{}]",
vtlModelDTOList.size());
···
}
若返回结果为基本类型等(boolean、String、int、double等),则打印返回结果。
public boolean checkNameExist(VTLModelDTO vtlModelDTO) {
···
boolean result = false;
···
// 将返回结果打印出来
LOGGER.info(" checkNameExist() end. return data : [{}].",
JsonObjectUtils.objectToJson(result));
···
}
若返回结果为含有多个元素的对象,则只打印有用字段(如显示在页面上的字段)。
public VTLModelDTO getModelDTOByEntityId(VTLModelDTO vtlModelDTO) {
···
VTLModelDTO vtlModelResultDTO = new VTLModelDTO();
···
// 将有用字段打印出来,GETMODELDETOBYENTITYID_OUT即为有用字段
LOGGER.info(" getModelDTOByEntityId() end. return data : [{}].",
VTLJsonObjectUtils.objectToJsonWithContains(vtlModelDTO,
VTLModelDTO.class, VTLModelLogArrayDTO.GETMODELDETOBYENTITYID_OUT));
···
}
2.3.2、返回异常
若返回异常,则打印错误信息并抛出异常。·
public List<VTLModelDTO> getAllVTLModelDTOByMakeId(VTLModelDTO vtlModelDTO) {
···
try {
···
} catch (BzException e) {
LOGGER.error(" getAllVTOModelDTOByMakeId() failed. e : [{}]", e);
throw new BzException(" 查询失败!");
}
···
}
3、其他
3.1、Assembler层
assembler层由于不涉及与数据库的交互,原则上不用打印日志。