springboot整合log4j日志记录及全局异常捕获

220 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情

  • springboot整合log4j日志记录

 1、在src/main/resources下面新建一个名为log4j.properties的文件:

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, stdout

2.在pom文件中添加log4j依赖的jar包:

    <!-- springboot   整合log4j -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-log4j</artifactId>
		<version>1.3.8.RELEASE</version>
	</dependency>

3.在controller中我们可以引入日志,进行打印,

@Controller
public class JspController {
	
	private static final Logger logger = LoggerFactory.getLogger(JspController.class);
    //引入日志时需要导入的Jar是:import org.slf4j.Logger;和import org.slf4j.LoggerFactory;
	
	@RequestMapping("/jspIndex")
	public String jspIndex() {
		
		logger.info("springboot 整合Log4j");
		return "jspSpringboot";
	}

}

4.这样我们再去访问controller时就会在控制台打印log:

  • springboot整合全局捕获异常

 首先要保证启动类能够扫到异常处理类。

编写全局捕获异常处理类:

package wyh.error;

import java.util.HashMap;
import java.util.Map;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 
* <p>Title: GlobalException</p>  
* <p>Description:全局捕获异常  异常返回1:json格式,2:返回页面 </p>  
* @author wyh
* @date Dec 2, 2018
 */
@ControllerAdvice//(basePackages="wyh.controller")如果不写basePackages,默认是扫描到所有@Controller和@RestController//springboot的异常切入点,basePackages定义扫包范围,一般扫controller,当定义的那个包中发生了异常,就会执行这个类。
public class GlobalException {

	@ExceptionHandler(RuntimeException.class)//拦截错误
	@ResponseBody//返回json.如果是返回视图,就用ModelAndView
	public Map<String, Object> errorResult(){
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("errorCode", "500");
		map.put("errorMsg", "系统错误");
		return map;
	}
	
}

编写异常:

package wyh.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ErrorController {

	
	@RequestMapping("/getUser")
	public String getUser(int i) {//参数在访问路径后面直接用?连接
		int j = 1/i;
		return "success"+j;
	}
}

目录结构:

启动测试:

此时出现异常时,控制台就不会抛出异常了。