您的位置:首页 > 编程语言 > Java开发

logback日志组件应用和logback.xml详解(springmvc和springboot)

2017-07-18 18:54 941 查看
本章将通过logback的配置文件和4个javabean为实例,来讲解和验证logback的使用方式。

最后分别生成debug、info、error类别,以及4个javabean分别生成一个日志文件。

如图:






一、简介

Logback是由log4j创始人设计的又一个开源日志组件。Logback为取代log4j而生。Logback官方网站:http://logback.qos.ch。

logback当前分成三个模块:logback-core,logback-classic和logback-access。

logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。

此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。

logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

二、与log4j的比较

1.更快的实现:Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小了。

2.非常充分的测试:Logback经过了几年,数不清小时的测试。Logback的测试完全不同级别的。

3.非常充分的文档

4.自动重新加载配置文件,当配置文件修改了,Logback-classic能自动重新加载配置文件。扫描过程快且安全,它并不需要另外创建一个扫描线程。

5.自动去除旧的日志文件:通过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你可以控制已经产生日志文件的最大数量。如果设置maxHistory 12,那那些log文件超过12个月的都会被自动移除。

等...

三、配置maven依赖包

log4j的配置,这里不再赘述。

Logback配置文件为:logback.xml,一般放在工程的resources包下。

maven依赖包:



四、准备程序
先抛开logback的配置文件,先用4个javabean来分别打印出日志信息。如图:



然后在TestA、B、C、D四个javabean中,分别打印出debug、info、warn、error信息。



这样调用A、B、C、D四个javabean,都会分别输出以上日志信息。

最后写一个main方法来调用并测试。



最后,通过logback.xml配置后,会打印出如下图的日志文件:



通过这样的方式,就能在系统中分模块、分功能的输出自己想要的日志信息,便于管理,然后再让我们看下logback.xml的配置文件。

先卖一个关子,我们先看看一下日志文件:TESTLOG_all_info.log.2017-07-18.log



为什么会出现B只打印了info、warn、error日志。C只打印了warn和error日志,而D只打印了error的日志呢?

而四个javabeanA、B、C、D分别生成的日志呢?如图:









这个我们在logback.xml中讲解

五、logback.xml配置文件 

<?xml version="1.0" encoding="UTF-8" ?>

truesystem-log-info: %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{100} - %msg%n trueINFO./log/TESTLOG_all_info.log./log/TESTLOG_all_info.log.%d{yyyy-MM-dd}.log30%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n20MBINFO./log/TESTLOG_all_test_info.log./log/TESTLOG_all_test_info.%d{yyyy-MM-dd}.%i.log155MB%date [%thread] %-5level %logger - %msg%nERRORACCEPTDENY./log/TESTLOG_all_error.log./log/TESTLOG_all_error.%d{yyyy-MM-dd}.%i.log155MB%date [%thread] %-5level %logger - %msg%nDEBUG./log/TESTLOG_all_debug.log./log/TESTLOG_all_debug.%d{yyyy-MM-dd}.%i.log155MB%date [%thread] %-5level %logger{80} - %msg%n./log/TESTLOG_a_debug.log./log/TESTLOG_a_debug.%d{yyyy-MM-dd}.%i.log155MB%date [%thread] %-5level %logger{80} - %msg%n./log/TESTLOG_b_info.log./log/TESTLOG_b_info.%d{yyyy-MM-dd}.%i.log155MB%date [%thread] %-5level %logger{80} - %msg%n./log/TESTLOG_c_warn.log./log/TESTLOG_c_warn.%d{yyyy-MM-dd}.%i.log155MB%date [%thread] %-5level %logger{80} - %msg%n./log/TESTLOG_d_error.log./log/TESTLOG_d_error.%d{yyyy-MM-dd}.%i.log155MB%date [%thread] %-5level %logger{80} - %msg%n


六、解释

为什么TESTLOG_all_info.log.2017-07-18.log的日志会是如上图那样:

因为在配置文件中A的日志级别是:debug;B的日志级别是:info;C的日志级别是:warn;D的日志级别是:error。

所以才会出现TESTLOG_all_info.log.2017-07-18.log那样的情况。

同理四个javabeanA、B、C、D分别生成的日志也是按照这个级别来显示输入的。如图:



其他的logback配置信息,在logback.xml中已经注释的非常清楚了。不必赘述。

另外:在spirngboot中,springboot已经集成了logback,如何通过application-*.properties直接配置logback,待研究。如:

logging.file=D:/logback/xxboot.log
logging.level.org.springframework.web=DEBUG


七、springboot中使用logback

对于简单的logback配置,在springboot的属性文件中就可以进行配置,但是对于比较复杂的输出情况,还是用logback.xml来进行配置稍好点。

对于昨天在spirngmvc中对加入logback进行测试后,笔者随后又在springboot中对以上配置文件进行了验证,发现上面的logback.xml配置在springboot中依然奏效。



代码如下:

//A-debug-log
@RestController
public class AlogController {

private final Logger log = LoggerFactory.getLogger(AlogController.class);

@RequestMapping("/Alog")
public void Alog(){
log.debug("test=====A=====debug-log");
log.info("test=====A=====info-log");
log.warn("test=====A=====warn-log");
log.error("test=====A=====errro-log");
}
}

//B-info-log
@RestController
public class BlogController {

private final Logger log = LoggerFactory.getLogger(BlogController.class);

@RequestMapping("/Blog")
public void Blog(){
log.debug("test=====B=====debug-log");
log.info("test=====B=====info-log");
log.warn("test=====B=====warn-log");
log.error("test=====B=====errro-log");
}
}

//C-warn-log
@RestController
public class ClogController {
private final Logger log = LoggerFactory.getLogger(ClogController.class);

@RequestMapping("/Clog")
public void Clog(){
log.debug("test=====C=====debug-log");
log.info("test=====C=====info-log");
log.warn("test=====C=====warn-log");
log.error("test=====C=====errro-log");
}
}

//D-error-log
@RestController
public class DlogController {
private final Logger log = LoggerFactory.getLogger(DlogController.class);

@RequestMapping("/Dlog")
public void Dlog(){
log.debug("test=====D=====debug-log");
log.info("test=====D=====info-log");
log.warn("test=====D=====warn-log");
log.error("test=====D=====errro-log");
}
}


其打印输出的效果是和springmvc中的效果是一样的。如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息