zoukankan      html  css  js  c++  java
  • DEBUG和INFO的使用

    Tomcat下的log日志级别

    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 明确错误现象 -> 错误关键描述 -> 最终的错误原因。

  • 相关阅读:
    ajax长轮询实现即时聊天室
    node.js 通过post上传图片并显示
    Java集合类详解
    多行子查询
    Oracle中查看用户下面所有表的语句
    关于Oracle的create
    Oracle数据库学习
    oracle数据库
    js 中 undefined、NaN、null
    学习数据库SQL语句2
  • 原文地址:https://www.cnblogs.com/cgy-home/p/11165073.html
Copyright © 2011-2022 走看看