SpringBoot使用logback示例

笔者的回首掏:重新梳理、纠正之前欠妥的地方2019-08-09  10:44:00。


基本知识说明

  • SpringBoot会默认使用logback作为日志框架。

  • SpringBoot会默认加载classpath:logback.xml或者classpath:logback-spring.xml或者classpath:logback-spring.groovy等文件作为日志配置文件。
    注:也可以在系统配置文件中指定SpringBoot加载哪一个文件作为日志配置文件,在application.properties文件
            中增加:logging.config=classpath:xxx.xml 即可指定xxx.xml为日志配置文件。

  •  如果是SpringBoot的项目的话,直接把logback-spring.xml配置文件放在src/main/resources文件夹下即可,如:

SpringBoot使用logback示例_第1张图片


SpringBoot使用logback的基本步骤

第一步:在pom.xml中引入SpringBoot的基本依赖

注:只要引入了spring-boot-starter-parent依赖,那么其会自动引入logback的相关依赖。

第二步:新建logback-spring.xml文件,放在classpath路径下(我们一般把其放
              在项目中的src/main/resources文件夹,该文件夹也对应classpath路径)
              即可

注:logback-spring.xml如何配置,见下文。

第三步:在代码中记录日志


logback-spring.xml配置说明

声明:下面的配置较基本,如果实际运用时,感觉下述配置不满足需求,那么请查阅相关文档了解更多。

logback-spring.xml配置示例:






	
	
	

	
	
	
		
			%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n
			
			UTF-8
		
	

	
	
		
		${log-dir}/${log-name}.log
		
		
		
		
		
			
			
			${log-dir}/${log-name}.%d{yyyy-MM-dd}.%i.log
			
			
			
			
			
				7
			
			
			
				5MB
			
		
		
			
			%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n
			
			UTF-8
		
	

	
	
	
	
		
		
	
	
	
		
	

给出上述配置在指定文件夹位置生成的log文件示例:

注:最新的日志,都在logFile.log文件中。

注:虽然我们限制了单个log文件的大小,但是其并不是严格的,即:一般会在超过界限大小不多后,进行日志文件的
       拆分。

注:上述配置有两个“淘汰”,第一个是“非当天的日志,淘汰”;第二个是“超过了指定大小的日志,淘汰”;由于本人
        测试时间的原因,这里只体现了第二个;其实第一个也是有效的。


代码中使用logback的示例

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.alibaba.fastjson.JSON;
import com.aspire.mapper.JavaAnnotationMapper;
import com.aspire.model.Employee;
import com.aspire.util.ExceptionUtil;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { AbcLogbackDemoApplication.class })
public class AbcLogbackDemoApplicationTests {

	/** 自动装配 */
	@Autowired
	JavaAnnotationMapper javaAnnotationMapper;

	/** Logger实例 */
	static final Logger logger = LoggerFactory.getLogger(AbcLogbackDemoApplicationTests.class);

	/**
	 * logback测试
	 *
	 * @date 2018年7月26日 下午4:12:56
	 */
	@Test
	public void logbackTest() {
		logger.info("进入logbackTest方法了!");
		try {
			Employee employee = new Employee("邓某", 24, "男");
			logger.info("employee对象的相应参数为:" + JSON.toJSONString(employee));
			javaAnnotationMapper.singleInsertAutoGetKey(employee);
			Integer id = employee.getId();
			logger.info("向表中插入employee对象的数据后,自动获取到的主键为:" + id);
			// System.out.println(1 / 0);
		} catch (Exception e) {
			logger.error("出错咯!错误信息:" + e.getMessage(), e.getCause());
			// 打印出错误堆栈信息
			e.printStackTrace();
		}
		logger.info("SpringBoot使用logback示例。");
		logger.info("logbackTest方法执行完毕!");
	}

}

注:e.printStackTrace()只能将错误堆栈信息输出到console不能将错误堆栈信息输出到日志文件中;使用logback框架
        时,如果既想将错误堆栈信息输出到console,又想将错误堆栈信息输出到日志文件中,那么在传参时,需要将
        Throwable异常实例也一起传过去:

SpringBoot使用logback示例_第2张图片

给出两个示例:

示例一(不使用marker标记站位,直接写msg):

示例二(使用marker标记站位写msg):

注:如果用户实现了Marker接口,这里也可以直接写Marker接口的实例。


其余相关知识说明

除了在日志配置文件中指定日志文件级别外,我们还可以这样指定日志文件记录日志的级别

  • 启动jar包时,可这样指定日志级别,如:

java -jar logback-demo-0.0.1-SNAPSHOT.jar --logging.level.root=info --logging.level.com.szlzcl.abc=debug
  • 在配置文件(如:.properties文件)中,可这样指定日志级别,如:

# 指定root的级别
logging.level.root=info
# 指定com.szlzcl.abc对应的logger的日志级别
logging.level.com.szlzcl.abc=debug

注:当有多处指定了同一logger的level时,会选择使用优先级最高的配置,优先级
        
启动jar包时 > xxx.properties/xxx.yml> 日志xml配置文件

将e.printStackTrace()的信息转化为字符串的工具类

      如果有的日志框架不能将e.printStackTrace()的信息打印到日志文件中,那么我们可以使用下面这个工具类,将错误栈信息转化为字符串,然后手动打印到日志文件中。

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * 异常工具类
 *
 * @author JustryDeng
 * @date 2018年7月27日 上午1:32:44
 */
public class ExceptionUtil {

   /**
    * 将异常堆栈 信息 转换为字符串
    *
    * @param e
    *            异常
    * @return 该异常的错误堆栈信息
    * @date 2018年7月27日 上午1:35:27
    */
   public static String getStackTraceMessage(Exception e) throws IOException {
      try (StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw)) {
         // 将异常的的堆栈信息输出到printWriter中
         e.printStackTrace(pw);
         pw.flush();
         sw.flush();
         return sw.toString();
      }
   }
}

提示如果是普通Java项目使用logback的话,那么需要引入以下依赖

同时,要将logback-spring.xml改名为logback.xml(因为普通java项目默认能识别logback.xml而不能识别logback-spring.xml),放入classpath下,如:

SpringBoot使用logback示例_第3张图片


提示个人认为,要想对日志框架有比较熟悉的了解,还需掌握xml中logger标签的级别继承基本选择原则
           基础知识,此处读者可自行查阅相关文档。


^_^ 如有不当,欢迎指正!

^_^ 参考链接
               
https://blog.csdn.net/jayzym/article/details/77196004

^_^ 代码托管链接
               https://github.com/JustryDeng/PublicRepository

^_^ 如有不当之处,欢迎指正

^_^ 本文已经被收录进《程序员成长笔记(二)》,笔者JustryDeng

你可能感兴趣的:(logback,SpringBoot,Java,日志,Slf4,Java知识大杂烩)