idea控制台打印⼤量debug⽇志_java中的⽇志框架梳理(以故
事的形式呈现)
⽇志算是java⼯具体系的⼀个知识点,但⼜是写代码的时候绕不过去的⼀个知识点,这篇⽂章主要是针对于⼩⽩,以故事的形式来对⽬前市场上常见的⼀些⽇志框架进⾏⼀个介绍和梳理。
阶段⼀:
从前有⼀个程序员,名字叫张三,张三呢,每天矜矜业业,业务能⼒代码能⼒都很强。⽼板就让他负责⼀个⽐较复杂的系统。于是张三呢,每天使⽤System.out.println(),在控制台打印出来⼀些关键的信息。这时候⿇烦来了,项⽬需要上线了,总不能还要把这些没⽤的信息输出到控制台吧,于是⽼板让张三把这些语句全部去掉。这么庞⼤的系统,张三呀,终于把所有的System.out语句全部注释掉了。
阶段⼆:
过了⼀段时间呢,项⽬遇到了⼀些问题,⽼板突然想起来张三之前写过System.out的相关语句,觉得有必要把⼀些关键信息打印出来,于是⼜让张三把所有的System.out语句添加进来,这下⼦⼜把张三忙活的不轻,累了⼀天终于⼜改过来了。在出错误之后,然后再重新去掉。
阶段三:
就这样来回折腾了⼏次,把张三⽓的不轻,毕竟需求总是会不断的变化的,于是张三考虑做⼀个框架,记录系统运⾏的⼀些必要的信息,这个框架就叫做⽇志框架,在这⾥且命名为logging-jar。
阶段四:
在第⼀代⽇志框架中,总是会把各种各样的运⾏信息打印出来,这对于张三来说只想要出⼀些错误信息,他必须要在很长的⼀个控制台去寻。于是张三考虑着如何改进这个框架,⽐如说把输出信息分类,有异常信息,有错误信息,还有警告信息等等。这对于张三来说,开发起来太便利了。叫做logging-good-jar。
阶段五:
⽼板⼀看,张三业务能⼒这么强,⼲脆把其他的⼀些项⽬也让张三带吧,于是张三⼜负责了⼀些其他的项⽬,但是问题⼜来了,其他的项⽬使⽤的不是张三的⽇志框架,⽽是其他的⽇志框架,怎么办呢?张三考虑着把这个项⽬的去掉,换成⾃⼰的不就可以了嘛,于是张三去掉了别⼈的,换成了⾃⼰的,⼜废了半天功夫更改了⼤量的⽇志api代码。
阶段六:
随着张三业务能⼒的不断增强,负责的项⽬也越来越多,接触到的⽇志框架也是残次不齐。于是张三
考虑定义⼀些规则接⼝,其他的任何框架都要有相应的实现⽅法,这样做的好处就是每次张三就不需要去掉别⼈的,换成⾃⼰的。⽽是调⽤相应⽇志框架的相关实现即可。这个规则就叫做⽇志门⾯,也叫做⽇志框架的抽象层。实现这些规则接⼝的框架就叫做⽇志实现框架。
idea debug⽬前最受欢迎的就是这么⼏个。按照使⽤的⾓度来说,那就是左边选择⼀个⽇志门⾯,右边选择⼀个⽇志实现就好了。就这样他们之前进⾏了激烈的竞争。
Ceki Gülcü是⼀个java⼤佬,⼀开始发明了log4j,后来把这个捐给了Apache基⾦会,后来觉得这个功能不够⽜,⼜发明了Ceki Gülcü是⼀个java⼤佬,⼀开始发明了log4j,后来把这个捐给了Apache基⾦会,后来觉得这个功能不够⽜,⼜发明了logback。logback⼀出来很离开,但是⽇志门⾯不能满⾜需求了,于是乎⼜设计了slf4j。
logback。logback⼀出来很离开,但是⽇志门⾯不能满⾜需求了,于是乎⼜设计了slf4j
阶段七:
随着时间的流逝,slf4j门⾯和logback⽇志实现框架脱颖⽽出。于是平时张三就⽤这个了。但是我们需要知道的是在使⽤的时候其实⽤的是⽇志门⾯slf4j的⽅法,⽽不⽤关⼼是哪⼀个实现的。springboot开发团队,⼀看这个搭配使⽤起来是真的好,于是就选⽤了他俩了。既然这么好,⼲脆我们使⽤springboot来整合⼀下他们俩。
第⼀步:添加依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
第⼆步:配置⽇志
在 srcmainresources 路径下创建l配置⽂件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义⽇志⽂件的存储地址勿在 LogBack 的配置中使⽤相对路径-->
<property name="LOG_HOME" value="/home" />
<!--控制台⽇志,控制台输出 -->
<appender name="STDOUT" class="ch.ConsoleAppender">
<encoder class="ch.qos.der.PatternLayoutEncoder">
<!--格式化输出:%d表⽰⽇期,%thread表⽰线程名,%-5-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder>
</appender>
<!--⽂件⽇志,按照每天⽣成⽇志⽂件 -->
<appender name="FILE" class="ch.olling.RollingFileAppender">
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<!--⽇志⽂件输出的⽂件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--⽇志⽂件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.der.PatternLayoutEncoder">
<!--格式化输出:%d表⽰⽇期,%thread表⽰线程名,%-5-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder>
<!--⽇志⽂件最⼤的⼤⼩-->
<triggeringPolicy class="ch.olling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- ⽇志输出级别 -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE"/>
</root>
</configuration>
上⾯的这些都是模板代码,你可以直接拿来⽤。下⾯我们就直接使⽤。
第三步:使⽤
@RestController
@RequestMapping("/logging")
public class Hello{
@Autowired
private HelloService helloService;
private final static Logger logger
= Logger(Hello.class);
@GetMapping("/test")
public String test(){
logger.info("这是⽇志框架的输出信息");
st();
}
}
运⾏结果就不展⽰了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论