1、为什么使用logback?
——在开发中不建议使用System.out因为大量的使用会增加资源的消耗。因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序。而使用Log工具不但可以控制日志是否输出,怎么输出,它的处理机制也是通知写日志,继续执行后面的代码不必等日志写完。
——个人推荐使用SLF4J(Simple Logging Façade For Java)的logback来输出日志,其比log4j效率高。
——Spring Boot 提供了一套日志系统,logback是最优先的选择。
2、logback,slf4j,log4j之间的关系
Slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j,LogBack,java.util.logging使用。Slf4j作为应用层的Log接入时,程序可以根据实际应用场景动态调整底层的日志实现框架(Log4j/LogBack/JdkLog...);
LogBack和Log4j都是开源日记工具库,LogBack是Log4j的改良版本,比Log4j拥有更多的特性,同时也带来很大性能提升。
3、Logback的结构
LogBack被分为3个组件,logback-core, logback-classic 和 logback-access.
其中logback-core提供了LogBack的核心功能,是另外两个组件的基础。
logback-classic则实现了Slf4j的API,所以当想配合Slf4j使用时,需要将logback-classic加入classpath。
logback-access是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口;
spring-boot默认支持logback,所以无需引用任何以来只需要,配置application.properties即可,如果要功能丰富些,则配置下logback.xml。
4、
5、具体的配置
在application.yml中的配置:
在logback-spring.xml中的配置;多环境的配置:
多环境日志输出根据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在 logback-spring.xml 中使用 springProfile 节点来定义,方法如下: 【注意文件名称不是logback.xml,想使用spring扩展profile支持,要以logback-spring.xml命名】
6、日志的级别
默认输出该等级之上的日志,顺序是由高到底,ERROR--WARN--INFO--DEBUG--TRACE
@RunWith就是一个运行器
@RunWith(JUnit4.class)就是指用JUnit4来运行
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
@RunWith(Suite.class)的话就是一套测试集合,
@RunWith 翻译成中文就是 测试运行器,JUnit所有的测试方法都是由测试运行器负责执行。JUnit为单元测试提供了一个默认的测试运行器BlockJUnit4ClassRunner,但是没有限制必须使用默认的运行器。我们常用的有参数运行器@RunWith(Suit.Class)@SuitClasses(MyTest.Class,MyTest2.Class)这个是打包测试功能,多个class 可以一起执行测试,不需要一个一个执行,这样节省时间,提高效率@RunWith(Parameteried.Class)模拟不同的参数方法进行测试,如果为每个类型参数创建一个方法,那是很耗时,傻瓜式的。@RunWith(SpringJUnit4ClassRunner.class)这个是用springmvc的容器@RunWith(Parameterized.class)
7、在java类中如何使用呢,springboot是约定大于配置,所以我们使用注解的方式来配置
在日志中输出变量的方式:
8、logback-spring.xml的具体的配置我们可以参考如下博客
https://blog.csdn.net/qianyiyiding/article/details/76565810
http://412887952-qq-com.iteye.com/blog/2307244
1-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n GBK RestAPI ${LOG_PATH}/${APPDIR}/log_error.log ${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log 2MB true ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n utf-8 error ACCEPT DENY ${LOG_PATH}/${APPDIR}/log_warn.log ${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log 2MB true ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n utf-8 warn ACCEPT DENY ${LOG_PATH}/${APPDIR}/log_info.log ${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log 2MB true ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n utf-8 info ACCEPT DENY %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
%d %p (%file:%line\)- %m%n UTF-8 log/demo.log log/demo.%d.%i.log 30 1KB %d %p (%file:%line\)- %m%n UTF-8
关于配置log日志的输出路径的问题:配置一个property,然后filenamePattern添加上去就行了。