软件中总免不了要使用诸如 Logger,Log4net,Log4j,Tracer 等东东来写日志,不管用什么,这些东东大多是大同小异的,一般都提供了这样5个日志级别:
× Debug
× Info
× Warn
× Error
× Fatal
一个等级比一个高,但是在具体开发中,关于应该如何选择适应的等级,却没有找到好的文章进行说明。记录一下自己的一些看法,以便日后使用吧。
1.Debug
这个级别最低的东东,一般的来说,在系统实际运行过程中,一般都是不输出的。因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的东东,比如变量的值等等,都输出来看看也无妨。当然,在每一个 Debug 调用之前,一定要加上 if 判断。
2.Info
这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),所以需要谨慎对待,不可随便。
3.Warn、Error、Fatal
警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,要区分还真不是那么简单的事情。我大致是这样区分的:
1.所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可以继续运行下去。
2.所谓错误,就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
3.所谓Fatal,那就是相当严重的了,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话,可以肯定必然会越来越乱。这时候采取的最好的措施不是试图将系统状态恢复到正常,而是尽可能地保留系统有效数据并停止运行。
总结: 也就是说,选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的,如果对以后基本没什么影响,则警告之,如果肯定是以后要出严重问题的了,则Fatal之,拿不准会怎么样,则 Error 之。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
@RequestMapping("/user/login.vw") public String login(HttpServletRequest request, HttpServletResponse response, ModelMap model, @ModelAttribute("login") @Validated CusLogin login, BindingResult bindingResult) throws Exception { log.debug("用户登录开始......"); if (null == login) { log.error("用户登录失败-登录信息不存在"); bindingResult.addError(new FieldError(ErrorMsg.USERNOTEXIST[0], ErrorMsg.USERNOTEXIST[0], ErrorMsg.USERNOTEXIST[1])); request.getSession().setAttribute(LOGINSTATE, "1"); login = new CusLogin(); login.setLoginState("1"); login.setPasswd(""); model.addAttribute("login", login); return INDEX; } if (bindingResult.hasErrors()) { List<ObjectError> ers = bindingResult.getAllErrors(); for (ObjectError e : ers) { log.error(e.getDefaultMessage()); } log.error("用户登录失败-请求参数错误;username=" + login.getLoginNm()); request.getSession().setAttribute(LOGINSTATE, "1"); login.setLoginState("1"); login.setPasswd(""); model.addAttribute("login", login); return INDEX; }
if ("1".equals(request.getSession().getAttribute(LOGINSTATE))) { if (login.getVerCode() == null || !login.getVerCode().equalsIgnoreCase( VerCodeMaker.verImgGet(session))) { VerCodeMaker.verImgDel(request); log.error("用户登录失败-验证码检查失败;username=" + login.getLoginNm()); bindingResult.addError(new FieldError(ErrorMsg.VERCODEEROOR[0], ErrorMsg.VERCODEEROOR[0], ErrorMsg.VERCODEEROOR[1])); request.getSession().setAttribute(LOGINSTATE, "1"); login.setLoginState("1"); login.setPasswd(""); model.addAttribute("login", login); return INDEX; } }
try { LoginUsersDto dto = loginService.login(login); if (null == dto || StringUtility.isEmpty(dto.getLoginName())) { bindingResult.addError(new FieldError(ErrorMsg.USERNOTEXIST[0], ErrorMsg.USERNOTEXIST[0], ErrorMsg.USERNOTEXIST[1])); log.error("用户登录-查询用户信息失败,不存在或DB数据错误;username=" + login.getLoginNm()); request.getSession().setAttribute(LOGINSTATE, "1"); login.setLoginState("1"); login.setPasswd(""); model.addAttribute("login", login); return INDEX; }
boolean isPwdExist = loginService.passwordChk(dto.getLoginName(), login.getPasswd(), dto.getPassword()); if (!isPwdExist) { bindingResult.addError(new FieldError(ErrorMsg.PWDERROR[0], ErrorMsg.PWDERROR[0], ErrorMsg.PWDERROR[1])); request.getSession().setAttribute(LOGINSTATE, "1"); login.setLoginState("1"); login.setPasswd(""); model.addAttribute("login", login); log.error("用户登录-密码检查失败;username=" + login.getLoginNm()); return INDEX; }
PayAuthInfoDto payInfoDto = payService.getPayAuthInfoByCusCode(dto .getCusCode()); User user = new User(); if (null != payInfoDto) { user = UserSession.userSet(dto, payInfoDto); } else { user = UserSession.userSet(dto); } UserSession.setUser(request, user); log.debug("用户登录结束");
} catch (BizException e) { log.info("用户登录失败;username=" + login.getLoginNm(), e); bindingResult.addError(new FieldError(ErrorMsg.UNKNOWEXPCTION[0], ErrorMsg.UNKNOWEXPCTION[0], ErrorMsg.UNKNOWEXPCTION[1])); login.setPasswd(""); model.addAttribute("login", login); return INDEX; } catch (Exception e) { log.info("用户登录失败,username=" + login.getLoginNm(), e); bindingResult.addError(new FieldError(ErrorMsg.UNKNOWEXPCTION[0], ErrorMsg.UNKNOWEXPCTION[0], ErrorMsg.UNKNOWEXPCTION[1])); login.setPasswd(""); model.addAttribute("login", login); return INDEX; } finally { request.getSession().removeAttribute(LOGINSTATE); } return REUSERINDEX; } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
|
心得:
log.error() 一般是需要if()的;
log.info()一般是在try catch 里面;
log.debug() 做记录一般标志着方法的开始和结束。
转载于:https://www.cnblogs.com/yangyi9343/p/5736951.html