原文地址:https://blog.csdn.net/tianyaleixiaowu/article/details/73321610

Springboot默认集成的就是logback,logback相对来说是优秀于log4j的,log4j2也是参考了logback的设计。本篇就是来看看如何使用logback。

新建一个Springboot项目,勾选web就OK了,项目会自动集成logback。

控制台日志

写一个controller测试一下:

  1.  
    import org.slf4j.Logger;
  2.  
    import org.slf4j.LoggerFactory;
  3.  
    import org.springframework.web.bind.annotation.GetMapping;
  4.  
    import org.springframework.web.bind.annotation.RestController;
  5.  
     
  6.  
    /**
  7.  
    * Created by admin on 17/6/16.
  8.  
    */
  9.  
    @RestController
  10.  
    public class IndexController {
  11.  
    private final Logger logger = LoggerFactory.getLogger(getClass());
  12.  
     
  13.  
    @GetMapping("/index")
  14.  
    public Object index() {
  15.  
    logger.debug("debug");
  16.  
    logger.info("info");
  17.  
    logger.warn("warn");
  18.  
    logger.error("error");
  19.  
    return "success";
  20.  
    }
  21.  
    }

需要注意:Logger是slf4j包中的logger,别引用错了。slf4j是一个工厂,可以和log4j、logback结合使用,熟悉工厂模式的自然理解。引用了logback那么Logger就会使用logback相关的方法来处理日志,引用了log4j也同理,这样能便于我们切换日志的实际处理类,这是工厂模式的优点。不要同时引用两个日志处理框架,这样工厂会懵逼的。

访问上面的controller,查看控制台打印:

2017-06-16 09:54:13.966  INFO 60356 --- [nio-8080-exec-1] c.e.demo.controller.IndexController      : info
2017-06-16 09:54:13.967  WARN 60356 --- [nio-8080-exec-1] c.e.demo.controller.IndexController      : warn
2017-06-16 09:54:13.967 ERROR 60356 --- [nio-8080-exec-1] c.e.demo.controller.IndexController      : error

我们发现除了debug没出来,其他的都出来了。

这是因为Springboot的日志level来控制的,根据不同的level来显示。在哪里控制呢?正常来说,应该是由我们在resources下配置的spring-logback.xml来控制,但是我们什么都没写,那么他就走了Springboot默认的配置。

这里就是Springboot对logback配置的地方,base.xml里,可以看到root level=INFO,这个代表该项目默认是输出最低为info级别的日志。然后看到有两个append-ref,分别为console何file,这两个分别对应上面引用的两个include resource里的xml,每个名字对应一个处理类。

ConsoleAppender和FixedWindowRollingPolicy都是logback提供的两个Appender处理类,Appender类代表了对日志的处理方法,这个可以自定义。系统提供了很多个Appender,基本满足了大部分场景的需求,像Console就是输出到控制台的,System.out.print之类的,而File的就是输出到日志文件的。

刚才可以看到在控制台已经打印出了info及以上级别的日志了,那日志文件在哪里呢?

日志文件

上一段看到了默认的base.xml指定了ref为console和file,Console已经打印了,file却没有出现。下面就让file出现。
在application.yml里加上:
logging:
  file: ./logback.log
这个是给日志文件起个名字,指定位置的。然后重新启动项目,并访问index,看看效果。
可以发现在项目外面多了一个文件logback.log,打开看看
发现和控制台的日志是一样的。

修改其他配置

在yml文件里还可以配置其他的一些属性
譬如我要修改level
logging:
  file: ./logback.log
  level:
    com.example.demo: debug
这样可以指定不同的包使用不同的level。我指定了demo包level为debug,controller也在该包下,重启项目访问index,会发现debug的能显示出来了。
这种配置可以细化,让不同的包显示不同的日志级别。
 

使用自定义配置

以上使用yml的配置功能比较少,要完成一些复杂配置,譬如在开发环境下和在生产环境下使用不同的level,使用自定义的Appender,那么就需要自定义配置。
 
在resources新建logback-spring.xml

修改日志级别

删除yml对于level的配置,在xml文件里配置如下:
  1.  
    <?xml version="1.0" encoding="UTF-8"?>
  2.  
    <configuration>
  3.  
    <include resource="org/springframework/boot/logging/logback/base.xml" />
  4.  
     
  5.  
    <root level="WARN">
  6.  
    <appender-ref ref="CONSOLE" />
  7.  
    <appender-ref ref="FILE" />
  8.  
    </root>
  9.  
     
  10.  
     
  11.  
    </configuration>

这里引用了base.xml并覆盖了root level为WARN,重启项目,并访问index

这下连Springboot启动时的日志都没有了,只剩下warn和error了.

按包名区分日志级别

  1.  
    <?xml version="1.0" encoding="UTF-8"?>
  2.  
    <configuration>
  3.  
    <include resource="org/springframework/boot/logging/logback/base.xml" />
  4.  
     
  5.  
    <root level="INFO">
  6.  
    <appender-ref ref="CONSOLE" />
  7.  
    <appender-ref ref="FILE" />
  8.  
    </root>
  9.  
     
  10.  
    <logger name="org.springframework.web" level="INFO"/>
  11.  
    <logger name="com.example.demo" level="WARN"/>
  12.  
    </configuration>

在xml里配置不同的包的日志level。结果自行测试。

按部署环境区分日志级别

我们可以在不同的环境配置不同日志级别,如dev环境下用INFO,prod环境下用ERROR。
 
  1.  
    <?xml version="1.0" encoding="UTF-8"?>
  2.  
    <configuration>
  3.  
    <include resource="org/springframework/boot/logging/logback/base.xml" />
  4.  
     
  5.  
    <root level="INFO">
  6.  
    <appender-ref ref="CONSOLE" />
  7.  
    <appender-ref ref="FILE" />
  8.  
    </root>
  9.  
     
  10.  
    <!-- 测试环境+开发环境. 多个使用逗号隔开. -->
  11.  
    <springProfile name="test,dev">
  12.  
    <logger name="org.springframework.web" level="INFO">
  13.  
    <appender-ref ref="FILE"/>
  14.  
    </logger>
  15.  
    <logger name="com.example" level="INFO" />
  16.  
    </springProfile>
  17.  
     
  18.  
    <!-- 生产环境. -->
  19.  
    <springProfile name="prod">
  20.  
    <logger name="org.springframework.web" level="ERROR">
  21.  
    <appender-ref ref="FILE"/>
  22.  
    </logger>
  23.  
    <logger name="com.example" level="ERROR" />
  24.  
    </springProfile>
  25.  
    </configuration>

写法如上,然后在yml里配置spring.profiles.active = dev结果自行测试。

按时间自动滚动的日志文件

这个就需要自定义一个appender的配置文件了
  1.  
    <appender name="MY_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  2.  
    <Prudent>true</Prudent>
  3.  
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  4.  
    <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
  5.  
     
  6.  
    <maxHistory>30</maxHistory>
  7.  
    <totalSizeCap>3GB</totalSizeCap>
  8.  
     
  9.  
    </rollingPolicy>
  10.  
    <layout class="ch.qos.logback.classic.PatternLayout">
  11.  
    <Pattern> %d{yyyy-MM-dd HH:mm:ss} -%msg%n</Pattern>
  12.  
    </layout>
  13.  
    <encoder>
  14.  
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
  15.  
    </encoder>
  16.  
    </appender>

我们定义一个name为MY_FILE的appender,配置fileName策略为按年月日.log的文件名,然后就可以使用这个Appender了。

  1.  
    <!-- 测试环境+开发环境. 多个使用逗号隔开. -->
  2.  
    <springProfile name="test,dev">
  3.  
    <logger name="org.springframework.web" level="INFO">
  4.  
    <appender-ref ref="MY_FILE"/>
  5.  
    </logger>
  6.  
    </springProfile>

需要注意,Appender的定义要在上面,使用它的地方要在下面,不然会报错找不到Appender。

定义好Appender后,就可以在任意的logger-name标签下使用了。需要注意不能同名,譬如不能也叫FILE,和base.xml里重名是不可以的。
文件的生成策略可以有很多,按天分文件夹,按大小,按容量等等,可以自行查找配置。
Appender也有很多种,系统已经完成的有Console,File,SocketAppender,SMTPAppender,DBAppender等,可以往远处服务器、数据库、文件、邮件、控制台等输出日志,功能强大。下一篇我会附一个系统已经完成的Appender说明。

自定义Appender

如果以上都不能满足要求,需要自定义Appender,譬如我们希望把日志除了往文件、控制台外,再往mongoDB输出一份,那么就需要自定义一个mongoAppender。回头等我实验好了,就弄一个mongoAppender。

springboot中使用logback的更多相关文章

  1. 在SpringBoot中使用logback优化异常堆栈的输出

    一.背景 在我们在编写程序的过程中,无法保证自己的代码不抛出异常.当我们抛出异常的时候,通常会将整个异常堆栈的信息使用日志记录下来.通常一整个异常堆栈的信息是比较多的,而且存在一些没用的信息.那么我们 ...

  2. 在SpringBoot中添加Logback日志处理

    前言 SpringBoot项目中在官方文档中说明,默认已经依赖了一些日志框架.而其中推荐使用的就是Logback,所以这一次我将在我的模版中加入Logback日志的配置,说明一下,SpringBoot ...

  3. SpringBoot(三) - Slf4j+logback 日志,异步请求,定时任务

    1.Slf4j+logback 日志 SpringBoot框架的默认日志实现:slf4j + logback: 默认日志级别:info,对应了实际生产环境日志级别: 1.1 日志级别 # 常见的日志框 ...

  4. 在SpringBoot项目中添加logback的MDC

    在SpringBoot项目中添加logback的MDC     先看下MDC是什么 Mapped Diagnostic Context,用于打LOG时跟踪一个“会话“.一个”事务“.举例,有一个web ...

  5. springboot中动态修改logback日志级别

    springboot中动态修改logback日志级别 在spring boot中使用logback日志时,项目运行中,想要修改日志级别. 代码如下: import org.slf4j.Logger; ...

  6. SpringBoot中Logback日志的配置

    说明 在SpringBoot中自带的日志工具是Logback,我们可以在Springboot的配置文件中直接对Logback进行一些简单的配置,如: logging.level.com.nowcode ...

  7. Springboot的日志管理&Springboot整合Junit测试&Springboot中AOP的使用

    ==============Springboot的日志管理============= springboot无需引入日志的包,springboot默认已经依赖了slf4j.logback.log4j等日 ...

  8. SpringBoot整合Slf4j+logback日志框架

    一.Slf4j简单介绍与优势 1.介绍 Slf4j的全称是Simple Loging Facade For Java(Java简单日志门面),它仅仅是一个为Java程序提供日志输出的统一接口,并不是一 ...

  9. SpringBoot 异步输出 Logback 日志

    一.介绍 1.1 Logback Logback是由log4j创始人设计的另一个开源日志组件,它分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它 ...

随机推荐

  1. background:url(./images.png) no-repeat 0 center的用法

    background:url(./images.png) no-repeat 0 center; //图像地址 不重复 水平位置0 垂直位置居中 background:url(./images.png ...

  2. CSS 兼容问题

    CSS常见兼容性问题总结 浏览器的兼容性问题通常是因为不同的浏览器对不同的代码有不同的解析造成页面显示不统一的情况,这里的浏览器通常指IE 6,7,8,9... Google Firefox Oper ...

  3. js 快速取整

    我们要将23.8转化成整数  有哪些方法呢 比如 Math.floor( ) 对数进行向下取整  它返回的是小于或等于函数参数,并且与之最接近的整数 Math.floor(5.1) 返回值 //5 M ...

  4. logisim自动生成电路

    之前再做有关logisim有关的实验时,一直在傻乎乎地连线,而我是看了mooc有关的视频时,才知道logisim有自动连线的功能. 自动连线需要事先知道输入与输出的真值表或者全部的表达式,将其填入lo ...

  5. SPOJ VLATTICE (莫比乌斯反演)

    传送门:https://www.spoj.com/problems/VLATTICE/en/ 题意: 在三维坐标系下,你在点(0,0,0),看的范围是(n,n,n)以内,求你可以看见多少个点没有被遮挡 ...

  6. spring boot 多数据源加载原理

    git代码:https://gitee.com/wwj912790488/multiple-data-sources DynamicDataSourceAspect切面 必须定义@Order(-10) ...

  7. 【转】Elasticsearch学习笔记

    一.常用术语 索引(Index).类型(Type).文档(Document) 索引Index是含有相同属性的文档集合.索引在ES中是通过一个名字来识别的,且必须是英文字母小写,且不含中划线(-):可类 ...

  8. Stylized Image Caption论文笔记

    Neural Storyteller (Krios et al. 2015) : NST breaks down the task into two steps, which first genera ...

  9. JMeter分布式负载测试(吞吐量控制器)

    在本节中,我们将学习如何使用吞吐量控制器在JMeter中创建分布式负载测试计划. 出于测试目的,我们将在我们网站 www.yiibai.com 的URL下的某些网页上创建分布式负载.这些网页包括: 主 ...

  10. 修改Samba密码后无法登录

    Samba修改用户名密码后,无法登陆 之后每次进去都是以这样的username和passwd进去的,如何才能使用其他的用户来重新登录samba server呢? 首先使用在开始菜单里面输入cmd: 进 ...