咱们说了springboot做日志管理的依赖原理,用logback的方式进行实现,那怎么用呢

springboot 看打印mysql打印sql脚本_Test

大家测试一下,我们打开之前创建的工程,现在不做任何配置的情况下,我就直接来运行这段代码,我们看到控制台其实

已经有日志输出了,所以我们说,springboot默认已经帮我们配置好日志了,我们直接使用就行了,那怎么用呢,我就用测试类,

如果我们想要记录一些东西,别用system.out了,system.out太简陋了,我们来用日志,日志我们首先是面对slf4j编程的,

有一个LoggerFactory,它是slf4j旗下的,有一个方法getLogger,Logger就是记录器,他要传一个class,那我就直接getClass,

把这个类的class传过去,

Logger logger = LoggerFactory.getLogger(getClass());

会给我们返回一个Logger,称之为记录器,我们就拿这个记录器记录日志,怎么记录呢,一个叫logger.trace,trace叫做跟踪

轨迹的意思,如果框架在运行过程中,跟踪一些信息,比用system.out了,然后还有一个logger.debug,debug这是调试,输出一些

调试信息,还有一个常用的是logger.info,这就是我们自己定义的一些信息,还有一个logger.warn,这相当于是警告,比如返回值

如果不是预期的,日志记录一下,还有logger.error,这是错误,如果你try catch要捕获异常,而它也出这个异常了,咱们的这个日志

记录一下,这是我们常用的这几个东西,而我们这些东西,叫日志的级别,日志级别由低到高,就是我们这几个

trace<debug<info<warn<error

我们要日志级别有什么用,这个日志框架的一大好处,可以调整日志输出的级别,比如我们的这个项目上线了,debug信息和info信息

我不想要,我只想要警告和错误,我们只想让她打印警告和错误,如果是以前我们要把它注掉,我们可以调整日志级别,

他只会打印这个级别及以后的内容,日志就只会在这个级别及以后的高级别生效,比如我们来举一个例子,

我们记录了一些信息,我们发现只输出了info,warn,error,

相当于trace和debug没有输出,springboot默认给我们默认的是info级别的,所以只会输出info级别及以后的内容,我们springboot,

也就是我这个类在输出的时候呢,我只能输出这几个级别,那我能不能调整啊,也可以调整,怎么调整呢,所有的日志调整,我们都在

配置文件里面,我们可以写一个logging
package com.learn.springboot;

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.context.ApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;

import com.learn.bean.Person;

/**
 * SpringBoot单元测试
 *
 * 可以在测试期间很方便的类似编码一样进行自动注入等容器的功能
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot02ConfigurationTests {
	
	@Autowired
	Person person;
	
	@Autowired
	ApplicationContext ioc;
	
	@Test
	public void testHelloService() {
		boolean b = ioc.containsBean("helloService02");
		System.out.println(b);
	}
	
	Logger logger = LoggerFactory.getLogger(getClass());
	
	@Test
	public void contextLoads() {
//		System.out.println(person);
		
		// 日志的级别
		// 由低到高 trace<debug<info<warn<error
		// 可以调整输出的日志级别;日志就只会在这个级别以后的高级别生效
		logger.trace("这是trace日志......");
		logger.debug("这是debug日志......");
		// SpringBoot默认给我们使用的是info级别的
		logger.info("这是info日志........");
		logger.warn("这是warn日志........");
		logger.error("这是error日志......");
	}
}
有一个level叫级别,level它是一个map,他写的就是你每一个包,或者你每一个类,你日志输出用什么级别,比如我们

只调com.learn,把com.learn,learn类里面的级别我都调成trace级别

logging.level.com.learn=trace

我调成这个级别,trace以后就都能够输出了,是不是这样呢,其实没调还是给默认的info,我们这些就输出全了
#debug=true
#server.port=8081

#server.context-path=/boot02

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

logging.level.com.learn=trace
没有制定级别的,就是用SpringBoot默认规定的级别,如果是知道这个日志框架,这就叫root级别的,把root规定成了info,

然后设置了的用我们的,没设置的,用root,然后这是我们这几个级别,以后我们开发就用它来做日志记录,通过都可以在

application里面看到,我们还有一个logging.path,和logging.file,logging.path和logging.file如果都不指定的情况下,

我们日志只会在控制台输出,如果我们用logging.file指定了日志的文件名,把日志输出到指定的文件

springboot 看打印mysql打印sql脚本_spring_02

我们先不写logging.path看一下,我来指定一个文件名,我们就叫springboot.log

logging.file=springboot.log

我来运行一下,我们来看这个日志,日志在这有记录,没问题,当前项目下就有springboot.log,当前项目下生成

springboot.log日志,我不想在当前项目下,那我能不能在哪个盘指定呢,蔽日我要他在d盘,

logging.file=D:/springboot.log

现在我们启动起来,在d盘看一下,这儿也有,也指定上路径,不指定路径在当前项目下生成,我们可以指定完整的路径,

就在我们指定的路径下,生成我们这个文件,这是logging.file,还有一个呢,叫logging.path,这path一听就是路径,

这指定路径还有什么用呢,logging.file和logging.path其实是冲突设置,你指定logging.file不指定logging.path,

file起作用了,如果你指定了logging.file和logging.path,还是logging.file起作用,我们一般是来指定logging.path,

path是我们来指定目录,我要指定一个你要生成的日志目录,日志文件用springboot默认的,比如我们指定一个目录叫

logging.path=/spring/log

这是什么意思啊,/在linux下是绝对路径,在当前磁盘的根路径,创建spring文件夹,和里面的log文件夹,然后使用日志文件

叫什么,使用spring.log作为默认文件,这是spring规定的,所以我来试一下,然后日志帮我们记录下来,所以我们在这可以指定路径,

当然也可以指定更多的东西,如有一个logging.parttern.console,这console就是我们在控制台,在控制台输出的日志格式,那么

还有一个你能指定,logging.pattern.file,指定文件中日志输出的格式,我们默认这个格式是什么样的呢,这一块我们叫做时间,

日志级别

logging.parttern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n

控制台%d就是日期,现在还是带上时分秒的,我现在不要时分秒了,然后加上线程号,加上我们这个级别,-5就是靠左对齐,logger就是

全类名50个字符,然后带上消息,%n换行,这是在控制台输出的,如果是在文件里面呢

logging.pattern.file=%d{yyyy-MM-dd} ==== [%thread] %-5level ==== %logger{50} ==== %msg%n

多给他中间加上==号,每一个每一个之间加上等等号,%thread就是我们的线程,线程用中括号括起来,我们看一下是不是按照

我们指定的格式走了呢,然后控制台输出的时候就没有时分秒了,然后我们来看我们的文件,我们现在就回按照我们规定的格式来了,

这也是我们也能规定格式,那么格式代表是什么意思
#debug=true
#server.port=8081

#server.context-path=/boot02

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

logging.level.com.learn=trace
#logging.file=D:/springboot.log
logging.file=springboot.log
#logging.path=/spring/log
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd} ==== [%thread] %-5level ==== %logger{50} ==== %msg%n

springboot 看打印mysql打印sql脚本_spring_03