SpringBoot 使用 logback 进行日志记录

 

log4j logback slf4j区别?

首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样的呢?SLF4J,即简单日志门面(Simple Logging Facade for JAVA),不是具体的日志解决方案,它只服务于各种各样的日志系统。一般来说,slf4j配合log4j、logback进行使用,可以理解为slf4j是标准,log4j和logback是实现,我们可以根据自己的需求进行选择具体的日志系统。
这里推荐使用logback,因为logback更快的执行速度,logback-classic 非常自然的实现了SLF4J,官方也推荐使用logback作为日志系统。

让我们开始使用 logback 吧!

一、不需要引入依赖

为什么不需要引入依赖呢?因为 SpringBoot 的核心依赖里已经包含了

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

 

使用 IDEA 选定指定依赖,然后选择查看图表,像这样

SpringBoot 使用 logback 进行日志记录

 

进去之后,点击放大镜按钮,放大,找到 spring-boot-starter,我们可以看到下图。已经引入了常见的日志依赖,也包括 logback

SpringBoot 使用 logback 进行日志记录

 

二、自定义 logback 配置文件

在 resource 根目录新建 logback-spring.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration debug="false">
  3.     <contextName>Logback For demo Mobile</contextName>
  4.     <!-- 设置log日志存放地址 -->
  5.     <!--(改) 单环境设置 -->
  6.     <!--<property name="LOG_HOME" value="/Users/liuyanzhao/Desktop/temp/log" />-->
  7.     <!-- 多环境设置 -->
  8.      <springProfile name="dev">
  9.          <property name="LOG_HOME" value="/Users/liuyanzhao/Desktop/temp/log" />
  10.      </springProfile>
  11.      <springProfile name="prod">
  12.          <property name="LOG_HOME" value="/logger/log" />
  13.      </springProfile>
  14.     <!-- 控制台输出 -->
  15.     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  16.         <!-- encoder默认配置为PartternLayoutEncoder -->
  17.         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  18.             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} -%msg%n</pattern>
  19.         </encoder>
  20.         <target>System.out</target>
  21.     </appender>
  22.     <!-- 按照每天生成日志文件 -->
  23.     <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  24.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  25.             <!--日志文件输出的文件名 ,每天保存(侧翻)一次 -->
  26.             <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.log</FileNamePattern>
  27.             <!--日志文件保留天数 -->
  28.             <MaxHistory>180</MaxHistory>
  29.         </rollingPolicy>
  30.         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  31.             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} -%msg%n</pattern>
  32.         </encoder>
  33.         <!--日志文件最大的大小 -->
  34.         <triggeringPolicy
  35.                 class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  36.             <MaxFileSize>20MB</MaxFileSize>
  37.         </triggeringPolicy>
  38.     </appender>
  39.     <!-- (改)过滤器,可以指定哪些包,哪个记录到等级, -->
  40.     <!-- 运用的场景比如,你只需要com.demo.controller包下的error日志输出。定义好name="com.demo.controller" level="ERROR" 就行了 -->
  41.     <logger name="com" level="ERROR">
  42.         <appender-ref ref="ROLLING_FILE" />
  43.     </logger>
  44.     <!-- 全局,控制台遇到INFO及以上级别就进行输出 -->
  45.     <root level="INFO">
  46.         <appender-ref ref="STDOUT" />
  47.     </root>
  48. </configuration>

 

因为博主的项目中使用了多环境配置,就是 resource 目录下有

application.properties,application-dev.properties,application-prod.properties 三个文件

applocation.properties 配置如下

spring.profiles.active=dev

然后其他配置写在 application-dev.properties 里

 

三、开始使用

导入包

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;

获得实例

  1. private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

直接使用

  1. logger.error("参数验证失败",);

 

这是一个例子,统一异常管理的一部分

  1. package com.liuyanzhao.forum.exception;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.ui.Model;
  5. import org.springframework.web.bind.annotation.ControllerAdvice;
  6. import org.springframework.web.bind.annotation.ExceptionHandler;
  7. /**
  8.  * 全局异常捕获
  9.  * @author 言曌
  10.  * @date 2018/3/20 下午12:57
  11.  */
  12. @ControllerAdvice
  13. public class GlobalExceptionHandler {
  14.     // 日志记录工具
  15.     private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
  16.     //错误显示页面
  17.     public static final String viewName = "/error/error";
  18.     @ExceptionHandler(value = Exception.class)
  19.     public String defaultErrorHandler(Exception e, Model model) {
  20.         logger.error("Exception", e);
  21.         String message = e.getMessage();
  22.         model.addAttribute("message", message);
  23.         model.addAttribute("code"500);
  24.         return viewName;
  25.     }
  26. }

 

四、查看效果

无需其他配置,新建了 logback-spring.xml 文件,Spring 容器会自动加载。

启动项目,然后进行一些试验

可以看到在我设置的目录下新建了一个 2018-3-24.log 文件,里面有 ERROR 层的异常信息

SpringBoot 使用 logback 进行日志记录

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
言曌

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: