Logback日记技术
Logback日记技术日记
日记(Logging)是软件开发和运维中用于记录体系或应用程序运行期间发生的运行信息、状态变化、错误信息等的一种机制,这种记录的方式就似乎我们日常生活中写日记一样。它提供了一种持久化的方式,使得开发者和运维人员可以回顾体系过去运行时发生的事变,了解体系的运行情况,诊断题目,并进行优化。
sout的范围
在Java程序运行时,我们可以通过尺度输出:System.out.println对程序运行过程进行监督,通过sout将程序运行过程输出在控制台中,方便观察和调试,sout输出也可以达到雷同于“记录日记”的效果,并且通过sout输出十分简朴、方便,但也十分范围:sout只能在控制台中输出,不能输出到其他地方(如本地文件大概数据库中),假如程序停止或清空控制台,就再也无法看到程序运行的过程了。并且使用sout在代码中记录日记,不便于项目标扩展和维护(假如说不需要记录日记了,那么必须去代码中sout的地方一行一行的更改),由于这些范围,以是说在现实开发中,我们一般是通过日记技术将项目运行的日记记录到本地文件中保存。
日记技术迭代
JUL
这是JavaSE平台提供的官方日记框架,设置相对简朴,年代久远,不敷灵活且性能较差,以是说如今已经基本上不再使用。
Log4j
这是一个盛行的日记框架,其提供了灵活的设置选项,支持多种输出目标(好比控制台,本地文件,数据库等),是一个比较强大的日记框架。
Logback
是Log4j的设计者根据Log4j升级的日记框架,其提供了更多的功能和设置选项,其性能也优于Log4j,是如今最受欢迎的日记框架。本文主要讲解的是Logback框架。
Slf4j
Simple Logging Facade for Java,其翻译成中文是简朴日记门面,其提供了一套日记操纵的尺度接口及抽象类,允许应用程序使用差别的底层日记框架。相称于可以在代码中直接使用Slf4j提供的API,但是真正干活的是底层日记框架的实现方法。
Logback快速入门
Logback使用十分简朴,当使用springboot框架构建项目时,更是事半功倍。
1.起首需要引入Logback的依靠,但是当我们使用springboot框架时,该依靠已经转达,无需手动引入:
https://i-blog.csdnimg.cn/direct/1d619545c92f46ff9adfd39fe04f7777.png如果不是使用springboot框架构建项目,就需要引入其依靠(至少得用maven构建项目吧...):
https://i-blog.csdnimg.cn/direct/811dfd210aaa4bf08d0180da92f7ef88.png
2.设置文件logback.xml,需要使用logback.xml设置文件设置logback框架的相干设置(好比日记级别、输出位置、日记格式等),假如是springboot项目,就需要将这个设置文件放在resource文件夹中。
3.定义日记记录对象Logger,这一步是固定的,想要记录日记,就需要一个日记记录对象Logger,我们是通过操纵Logger对象中的方法记录日记的,其定义方式是固定的:
private static final Logger log = LoggerFactory.getLogger(当前类的字节码文件)
注意:要使用Slf4j中的Logger对象和LoggerFactory!
https://i-blog.csdnimg.cn/direct/74573396334444b3a3b9f6013ce5aa4a.png
https://i-blog.csdnimg.cn/direct/c6a9edd5da4849f0b5bc28908742e060.png
假如使用了Lombok,那么可以直接使用注解@Slf4j,这个注解就会主动资助我们创建一个名为log的Logger对象。
做好这些准备工作之后,就可以记录日记了:
@SpringBootTest
class JavaWeb12LogbackApplicationTests {
private static final Logger log = LoggerFactory.getLogger(JavaWeb12LogbackApplicationTests.class);
@Test
public void testLogback() {
log.info("开始计算");
int sum = 0;
for (int i = 0; i < 100; i++) {
sum += i;
}
log.info("计算结果为{}", sum);
log.info("{}结束计算", LocalDateTime.now());
}
}
观察控制台输出日记:
https://i-blog.csdnimg.cn/direct/4b18ce25dd7445df89e91b2ab2127f10.png
如图所示,说明使用Logback日记框架记录日记成功,成功在控制台中记录了日记。但是仅仅是在控制台中输出日记,这和sout并无区别,反而显得更加复杂,这个时间我们就需要在logback.xml中进行设置,设置Logback的细节了。
logback.xml设置文件
logback.xml设置文件是对日记框架输出的日记进行控制的,可以用于设置日记输出的格式、位置、开关日记输出等,我们先来看这样一份常见的logback.xml设置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
</encoder>
</appender>
<!-- 系统文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名,%i表示序号,从0开始-->
<FileNamePattern>D:/log/web_study-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<!--最多保存的历史日志文件数量-->
<MaxHistory>100</MaxHistory>
<!--每个日志文件的最大大小,超过这个大小会自动记录到新文件,默认为10MB-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
日记输出级别
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
这段设置文件中的代码规定了日记的输出级别,level="info",则意味着必须级别≥info的日记才能被输出,级别<info的日记就不会被输出了;可以根据需求,设置差别的级别。appender-ref ref="STDOUT"是将日记输出到控制台,appender-ref ref="FILE"是将日记输出到体系文件。这段代码的意思可以理解为:将级别≥info的日记输出到控制台和体系文件。
控制台输出
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
</encoder>
</appender>
这段设置文件主要是设置控制台输出,需要在appender中指定name属性为STDOUT(便于输出级别引用),class属性指定为ch.qos.logback.core.ConsoleAppender,代表这是控制台输出。在encoder中设置输特别式,%d表示需要输出时间,然后在{}中指定时间的格式;%thread表示需要输出是哪个线程输出该日记的;由于日记级别一般是4-5个字符,以是说使用%-5level,输出日记级别,通过指定宽度,可以让日记输出更加雅观;%msg就是日记输出的消息内容;%n是换行符,这个一般来说都会加,便于日记观察。
体系文件输出
<!-- 系统文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名,%i表示序号,从0开始-->
<FileNamePattern>D:/log/web_study-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<!--最多保存的历史日志文件数量-->
<MaxHistory>100</MaxHistory>
<!--每个日志文件的最大大小,超过这个大小会自动记录到新文件,默认为10MB-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
</encoder>
</appender>
这段设置文件主要是设置体系文件输出,需要在appender中指定name属性为FILE(便于输出级别引用),class属性指定为ch.qos.logback.core.rolling.RollingFileAppender,代表这是文件输出。在rollingPolicy中设置输出体系文件的设置:FileNamePattern用于设置日记输出的文件名%d用于表示时间,和上面一样、%i是序号,从0开始,日记文件的后缀名一般是.log;MaxHistory表示体系最多保存的历史日记文件数量,此处设置为100;MaxFileSize表示每个日记文件的最大大小,超过这个大小会主动记录到新文件,默认是10MB。encoder中的内容和控制台输出一致,此处不做赘述。
日记级别
日记级别是指日记信息的类型,日记都会分级别,常见的日记级别如下:
trace
trace级别是日记级别中最低的级别,用于追踪、记录程序的运行轨迹,使用较少。
debug
debug级别高于trace级别,是用于记录程序调试过程信息,现实应用中将其视为最低级别(现实上最低级别是trace,但是在使用时将debug当作最低),使用较多。
info
info级别高于debug级别,用于记录一般信息,描述程序运行相干事件,好比:网络连接、io操纵等,使用较多。
warn
warn级别高于info级别,用于输出警告信息,记录潜伏的有害情况,使用较多。
error
error级别是这几个级别中最高的级别,用于输堕落误信息,使用较多。
我们在logback.xml文件中设置日记输出级别时,若不是特殊情况,不建议输出info级别以下的日记,由于很多框架在启动时,会输出大量的trace和debug级别的日记,会影响我们检察日记。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]