在SpringBoot中使用Logback管理记录日志

SpringBoot的默认日志配置

SpringBoot 开箱即用,默认帮你配置了日志框架,使用 Commons Logging ,但是默认配置也提供了对常用日志的支持,如: Java Util Logging , Log4J , Log4J2 和 Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。

控制台输出

关于log日志,首先说说的5个日志级别 LEVEL: 从高到低分别是 ERROR WARN INFO DEBUG TRACE 低级别的会输出高级别信息,高级别不会输出低级别信息。例如:等级设为 ERROR 的话, WARN INFO DEBUG 的信息是不会输出的。 在 SpringBoot 中默认配置了 ERROR WARNINFO 级别的日志输出到控制台。 Logback中没有 FATAL 级别,它会被当作 ERROR 级别来处理。

我们可以通过两种方式切换至 DEBUG 级别:

  1. 在运行命令后加入 --debug 标志,如: $ java -jar myapp.jar --debug
  2. application.properties 中配置 debug=true ,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。

多彩输出

SpringBoot 从1.4.0版本开始支持彩色日志输出了。 如果你的终端支持ANSI,设置彩色输出会让日志更具可读性。通过在 application.properties 中设置 spring.output.ansi.enabled 参数来支持。

  1. NEVER :禁用ANSI-colored输出(默认项)
  2. DETECT :会检查终端是否支持ANSI,是的话就采用彩色输出(推荐项)
  3. ALWAYS :总是使用ANSI-colored格式输出,若终端不支持的时候,会有很多干扰信息,不推荐使用

文件输出

SpringBoot 默认配置只会输出到控制台,并不会记录到文件中,但是我们通常生产环境使用时都需要以文件方式记录。

若要增加文件输出,需要在 application.properties 中配置 logging.file logging.path 属性。

  1. logging.file :设置文件,可以是绝对路径,也可以是相对路径。如: logging.file=my.log
  2. logging.path :设置目录,会在该目录下创建spring.log文件,并写入日志内容,如: logging.path=/var/log

日志文件会在10Mb大小的时候被截断,产生新的日志文件,默认级别为:ERROR、WARN、INFO

级别控制

在 SpringBoot 中只需要在 application.properties 中进行配置完成日志记录的级别控制。

配置格式: logging.level.*=LEVEL

  1. logging.level :日志级别控制前缀, * 为包名或Logger名
  2. LEVEL :选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

举例:

  1. logging.level.com.controller=DEBUG : com.controller 包下所有class以 DEBUG 级别输出
  2. logging.level.root=WARN :root日志以 WARN 级别输出

自定义日志配置

如果不想使用默认配置,只要加入自己的日志配置文件就行了。 由于日志服务一般都在 ApplicationContext 创建前就初始化了,它并不是必须通过 Spring 的配置文件控制。因此通过系统属性和传统的 Spring Boot 外部配置文件依然可以很好的支持日志控制和管理。

根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

  1. Logback: logback-spring.xml , logback-spring.groovy , logback.xml , logback.groovy
  2. Log4j: log4j-spring.properties , log4j-spring.xml , log4j.properties , log4j.xml
  3. Log4j2: log4j2-spring.xml , log4j2.xml
  4. JDK (Java Util Logging): logging.properties

SpringBoot 官方推荐优先使用带有 -spring 的文件名作为你的日志配置(如使用 logback-spring.xml ,而不是 logback.xml )

自定义输出格式

在 SpringBoot 中可以通过在 application.properties 配置如下参数控制输出格式:

  1. logging.pattern.console :定义输出到控制台的样式(不支持JDK Logger)
  2. logging.pattern.file :定义输出到文件的样式(不支持JDK Logger)

也可以直接在日志配置文件中定义这些格式,而不是在应用配置文件中。

常用的Logback配置文件模板

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
 <property name="LOG_HOME" value="d:/logs"/>

 <!-- 彩色日志依赖的渲染类 -->
 <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
 <conversionRule conversionWord="wex"
     converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
 <conversionRule conversionWord="wEx"
     converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
 <!-- 彩色日志格式 -->
 <property name="CONSOLE_LOG_PATTERN"
    value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(--){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
 <!-- Console 输出设置 -->
 <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
 <encoder>
 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
 <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>-->
 <pattern>${CONSOLE_LOG_PATTERN}</pattern>
 <charset>utf8</charset>
 </encoder>
 </appender>

 <!-- 按照每天生成日志文件 -->
 <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   <!--日志文件输出的文件名-->
   <fileNamePattern>${LOG_HOME}/mixedSys.%d{yyyy-MM-dd}.log</fileNamePattern>
  </rollingPolicy>
  <encoder>
   <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
 </appender>

 <!-- 日志logger(包.类)的输出级别 -->
 <logger name="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver" level="DEBUG" >
 <appender-ref ref="console" />
 <appender-ref ref="file" />
 </logger>

 <logger name="org.springframework.boot" level="DEBUG"/>
 <!-- 为 Hibernate sql 定制 -->
 <!-- <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
 <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
 <logger name="org.hibernate.SQL" level="DEBUG" />
 <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
 <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> -->

 <!-- 日志输出级别 -->
 <root level="INFO"> <!-- 此时debug级别的信息会被过滤 -->
  <appender-ref ref="console" />
  <appender-ref ref="file" />
 </root> 

 <!--日志异步到数据库 -->
 <!-- <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
  日志异步到数据库
  <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
   连接池
   <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <driverClass>com.mysql.jdbc.Driver</driverClass>
    <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
    <user>root</user>
    <password>root</password>
   </dataSource>
  </connectionSource>
 </appender> -->

</configuration>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot异步输出Logback日志方法详解

    一.介绍 1.1 Logback Logback是由log4j创始人设计的另一个开源日志组件,它分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能 1.2 日志级别 包括:TRACE.DEBUG.INFO.WARN

  • 详解Spring Boot下使用logback 记录多个文件日志

    背景 这两天遇到一个比较有意思的日志问题. 近期对我之前的python代码进行java的重构, 一方面是因为java使用的医疗库非常健全稳定, 可以商用. 另一方面是因为java速度快, 这个库的实现的效率也高, 性能是Python版本的好几倍. 但是作为这个项目的唯一作者, 我的癖好也成为这个项目的风格. 这个项目会给很多部署工程师使用. 当然项目的可用性和性能作为第一考虑的因素, 但是作为一个懒人, 对使用软件时候的复杂部署过程和混乱调试信息深恶痛绝. 所以我在项目中使用了高度可配置/易用和

  • Spring Boot 使用 logback、logstash、ELK 记录日志文件的方法

    Spring Boot 下,尝试使用 log4j 记录日志到 logstash,在src/main/resources 目录下添加 log4j.properties 文件进行自定义输出日志文件,未能成功.在 application.yml 中 配置 logging path 打印日志成功了,但是未能调试成功日志分文件记录.网上查阅资料,说是 Spring Boot 默认使用 logback 记录日志.log4j 多次尝试后无果,遂改为使用 logback 记录,最终测试成功. 1. 关于 Spr

  • 基于logback 实现springboot超级详细的日志配置

    前言 java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日志框架就能够用 slj4f 调用).其中性能最高的应该使 logback 了,而且 springboot 默认使用的也是 logback 日志,所以本篇将会详细的讲解 logback 的日志配置方案. 本篇主要内容如下: •logback 配置文件的构成 •如何将日志输出到文件 •如何按时间,按大小切分日志 •如何将让一个日志文件中只有

  • SpringBoot之LogBack配置详解

    LogBack 默认集成在 Spring Boot 中,是基于 Slf4j 的日志框架.默认情况下 Spring Boot 是以 INFO 级别输出到控制台. 它的日志级别是: ALL < TRACE < DEBUG < INFO < WARN < ERROR < OFF 配置 LogBack 可以直接在 application.properties 或 application.yml 中配置,但仅支持一些简单的配置,复杂的文件输出还是需要配置在 xml 配置文件中.配

  • Spring Boot Logback配置日志过程解析

    这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 出于性能等原因,Logback 目前是springboot应用日志的标配: 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式. 配置时考虑点 支持日志路径,日志level等配置 日志控制配置通过application.yml下发 按天生成日志,当天的日志>50MB回滚 最多保存10天日志 生成的日志中Pattern自

  • 如何修改覆盖spring boot默认日志策略logback详解

    背景 Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback.每种Logger都可以通过配置使用控制台或者文件输出日志内容. 默认日志Logback SLF4J--Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象.Java日志框架众多--常用的有java.util.logging, log

  • SpringBoot之logback-spring.xml不生效的解决方法

    一.前言 做新应用就是这样,会遇到各种问题,昨天刚解决了加载某一个类时候抛出了 class is not visible from class loader 的问题,今天就有遇到了日志文件找不到的问题,还是和二方库有关的,下面就一一道来. 二.问题产生 正常情况下在  src/main/resources 目录放下  logback-spring.xml 的配置文件(使用logback日志系统),如下图 application.properties里面设置  spring.application

  • 在SpringBoot中使用Logback管理记录日志

    SpringBoot的默认日志配置 SpringBoot 开箱即用,默认帮你配置了日志框架,使用 Commons Logging ,但是默认配置也提供了对常用日志的支持,如: Java Util Logging , Log4J , Log4J2 和 Logback.每种Logger都可以通过配置使用控制台或者文件输出日志内容. 控制台输出 关于log日志,首先说说的5个日志级别 LEVEL: 从高到低分别是 ERROR . WARN . INFO . DEBUG . TRACE 低级别的会输出高

  • SpringBoot中使用Quartz管理定时任务的方法

    定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的 Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任务的时候,就需要去改动代码,还得启停服务器,这是非常不友好的事情 直至遇见 Quartz,利用图形界面可视化管理定时任务,使得我们对定时任务的管理更加方便,快捷 一.Quartz 简介 Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵

  • 如何在SpringBoot中使用logback优化异常堆栈的输出详解

    目录 一.背景 二.需求 三.使用的技术 四.技术实现 1.引入依赖 2.代码实现 3.使用 ShortenedThrowableConverter 来优化异常堆栈 4.查看运行结果 五.完整代码 六.参考文档 总结 一.背景 在我们在编写程序的过程中,无法保证自己的代码不抛出异常.当我们抛出异常的时候,通常会将整个异常堆栈的信息使用日志记录下来.通常一整个异常堆栈的信息是比较多的,而且存在一些没用的信息.那么我们如何优化一些异常堆栈的信息打印,过滤掉不必要的信息呢? 二.需求 1.现有的异常堆

  • SpringBoot应用自定义logback日志详解

    目录 概述 logback配置详解 配置内容概念介绍 配置介绍 SpringBoot中自定义logback 多环境输出日志文件 读取配置文件配置 概述 默认情况下,SpringBoot内部使用logback作为系统日志实现的框架,将日志输出到控制台,不会写到日志文件.如果在application.properties或application.yml配置,这样只能配置简单的场景,保存路径.日志格式等.复杂的场景(区分 info 和 error 的日志.每天产生一个日志文件等)满足不了,只能自定义配

  • SpringBoot中整合Shiro实现权限管理的示例代码

    之前在 SSM 项目中使用过 shiro,发现 shiro 的权限管理做的真不错,但是在 SSM 项目中的配置太繁杂了,于是这次在 SpringBoot 中使用了 shiro,下面一起看看吧 一.简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序. 三个核心组件: 1.Subject 即"当前操作用户".但是,在 Shi

  • 教你在SpringBoot中管理多环境配置文件

    实现 1.可以通过配置项 spring.profiles.active 的值来激活对应的环境(思路:使用一个默认的文件作为通用配置文件,不同的配置项写入不同环境的配置文件中,部署不同环境时,只需要修改spring.profiles.active的值即可.个人习惯在通用配置文件只保留spring.profiles.active一个配置项,灵活性高一点) 2.通过部署命令java -jar xxx.jar --spring.profiles=xxx 来激活指定的配置项 针对不同的环境,一般常用的命名

  • 详解SpringBoot中异步请求和异步调用(看完这一篇就够了)

    一.SpringBoot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应.一句话:增加了服务器对客户端请求的吞吐量(实际生产上我们用的比较少,如果并发请求量很大的情况下,我们会通过nginx把请求负载到集群服务的各个节点上来分摊请求压力,当然还可以通过消息队列来做请求的缓冲). 2.异步请求的实现 方式一:Servlet方式实现异步请求

  • SpringBoot项目的logback日志配置(包括打印mybatis的sql语句)

    关于logback日志的详解见这位仁兄的博客:Spring Boot-日志配置(超详细) 我在这就开门见山直接介绍我们项目日志的配置使用吧!~ 1.基本介绍 默认情况下,Spring Boot项目就会用Logback来记录日志,并用INFO级别输出到控制台.如下图: 实际开发中我们不需要直接添加logback日志依赖. 你会发现 spring-boot-starter 其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 lo

  • 在Spring Boot中如何使用log4j记录日志

    前言 Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback.每种Logger都可以通过配置使用控制台或者文件输出日志内容.本文主要介绍了在Spring Boot中如何使用log4j记录日志,感兴趣的来一起学习学习. 引入log4j依赖 在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-s

  • SpringBoot中的Thymeleaf用法

    Thymeleaf Thymeleaf是最近SpringBoot推荐支持的模板框架,官网在thymeleaf.org这里. 我们为什么要用Thymeleaf来作为模板引擎呢?官网给了我们一个非常令人信服的解释: Thymeleaf is a modern server-side Java template engine for both web and standalone environments.> 基本写法就像下面这样: <table> <thead> <tr&g

随机推荐