logback日志记录

最近在学习Spring Boot,发现Spring Boot自身集成logback日志记录,造成我希望使用log4j的时候出现问题,百度了一下发现logback更新更好用,所以这里记录一下配置流程。

Java框架是SSM,所以只捕获controller层异常,其他层不处理异常信息,将所有的异常都交到controller层。
以下为logback.xml配置文件内容:



	
	
	
	
		
			
			%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
				%msg%n
		
	
	
	
		true
		
			
			${testName}/all/PetAll-%d{yyyy-MM-dd}.%i.log
			
			
			30
			
			
				
				20MB
			
		
		
			
			%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
				%msg%n
		
		
		
			10MB
		
	

	
	
		
		
			INFO
			ACCEPT
			DENY
		
		
			${testName}/info/PetInfo-%d{yyyy-MM-dd}.%i.log
			
			50
			
				30MB
			
		
		
			%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
			
		
	
	
	
		
		
			ERROR
			ACCEPT
			DENY
		
		
			${testName}/error/PetError-%d{yyyy-MM-dd}.%i.log
			
			10
			
				10MB
			
		
		
			%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n%n
			
		
	
	
	
		
		
		
	

	
		
	

此处将日志信息分类存放,学习的时候可以只考虑一个文件,具体的标签含义已经有注释,其中logger标签的name属性为项目包名,考虑到可能会有多个地方使用日志(全局异常、用户操作记录等)所以此处为上层目录。
下面为全局异常捕获的类(GlobalExceptionHandler):

package org.pet.king.exception;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import ch.qos.logback.classic.Logger;

/**
 * 全局异常捕获,捕获所有的控制层提供的接口错误
* 1、将异常写入日志文件
* 2、根据异常类型返回指定数据
*/ @ControllerAdvice(basePackages = "org.pet.king.controller") public class GlobalExceptionHandler { /** * 日志类 */ private final static Logger logger = (Logger) LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 异常信息转化为String类型,等同于e.printStackTrace()输出参数 * * @param t * 异常 * @return 异常详细信息 * @author single-聪 * @date 2019年4月15日 * @version 1.0.0 */ public static String getTrace(Throwable t) { StringWriter stringWriter = new StringWriter(); PrintWriter writer = new PrintWriter(stringWriter); t.printStackTrace(writer); StringBuffer buffer = stringWriter.getBuffer(); return buffer.toString(); } /** * 全局异常捕获,暂时为区分异常类型,所有运行时异常统一在此方法中 * * @param e * 异常 * @return map集合,info为error * @author single-聪 * @date 2019年4月15日 * @version 1.0.0 */ @ResponseBody @ExceptionHandler(RuntimeException.class) public Map RuntimeException(Exception e) { Map map = new HashMap<>(); System.out.println("全局捕获运行时异常,同时写入日志文件"); e.printStackTrace(); logger.error(getTrace(e)); map.put("info", "error"); return map; } }

为了方便,此处捕获所有的运行时异常,实际开发中需要考虑到不同的异常种类返回不同值,getTrace的目的是将异常信息转换成String类型,否则写到日志文件中的就只有异常类型那一行而无法知道具体是哪里报的错误。
logger.error("")是将错误信息写入到error等级日志文件中,同时又info、debug、trace等方法,这样就可以将不同的信息打印到不同的文件中去。

你可能感兴趣的:(SSM框架)