DEBUG和INFO的區別 何時用debug何時用info


1. 等級:DEBUG<INFO<WARN<ERROR<FATAL;

2. 區別:

2.1 DEBUG,主要用於在調試時更詳細的了解系統運行狀態 2.2 INFO,重要的輸出信息,用來反饋系統的當前狀態給最終用戶的; **WARN,ERROR,FATAL,分別是警告、錯誤、嚴重錯誤,這三者是系統運行時檢測到了一個不正常的狀態。** 2.3 WARN, 可修復,系統可繼續運行下去; 2.4 ERROR, 可修復性,但無法確定系統會正常的工作下去; 2.5 FATAL, 相當嚴重,可以肯定這種錯誤已經無法修復,並且如果系統繼續運行下去的話后果嚴重。 

3. 使用:

什么時候使用 INFO, WARM, ERROR,FATAL?

3.1 INFO用於打印程序應該出現的正常狀態信息, 便於追蹤定位;

3.2 WARM表明系統出現輕微的不合理但不影響運行和使用;

3.3 ERROR表明出現了系統錯誤和異常,無法正常完成目標操作。

3.4 FATAL表明出現了無法修復的錯誤,並且如果系統繼續運行下去的話,必然會越來越亂。
出現FATAL時,采取的最好的措施不是試圖將系統狀態恢復到正常,而是盡可能地保留系統有效數據並停止運行。

4. 示例:

/**
 * <p>Title: 用戶登錄處理</p>
 * <p>Description: </p>
 * @param loginId
 * @return redirect page
 */
@RequestMapping("/user/login.vw")
public String login(HttpServletRequest request, HttpServletResponse response, ModelMap model, 
    @ModelAttribute("login") @Validated CusLogin login,BindingResult bindingResult) throws Exception {
    
    log.debug("用戶登錄開始......");

    // 檢查登錄信息對象:null判斷
    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();
    
        // 1代表登錄時用戶輸入的信息有誤
        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());
        }
        //has error
        log.error("用戶登錄失敗-請求參數錯誤;username=" + login.getLoginNm());
        //redirect index.jsp
        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 {
        //no error 
        // 獲取登錄用戶信息:條件為用戶名和用戶類型
        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());
    
        // 創建SESSION數據
        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;
}

5. 排查步驟:
5.1 打開Tomcat文件中的logs文件夾,然后打開需要查找的文件,debug.log、info.log、error.log等;
5.2 其中,每個日志文件是由時間和大小規則生成的;
5.3 如一個項目的debug.log文件,是2019/7/10 11:48:00創建的,假設14:00,文件裝滿,比如說40M,那么就會保存為debug.log.1,並再生成一個debug.log文件以此類推;
5.4 debug.log.1文件記錄了11:48:00到14:00的日志信息;
5.5 如打開debug.log文件,CTRL+F輸入查找目標進行搜索定位;
5.6 明確錯誤現象 -> 錯誤關鍵描述 -> 最終的錯誤原因。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM