spring boot logback 配置

2023-11-11

为什么要使用logback ?

       ——在开发中不建议使用System.out因为大量的使用会增加资源的消耗。因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序。而使用Log工具不但可以控制日志是否输出,怎么输出,它的处理机制也是通知写日志,继续执行后面的代码不必等日志写完。

       ——个人推荐使用SLF4J(Simple Logging Façade For Java)的logback来输出日志,其比log4j效率高。

    ——Spring Boot 提供了一套日志系统,logback是最优先的选择。

疑惑解答:logback,slf4j,log4j之间的关系

       Slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j,LogBack,java.util.logging使用。Slf4j作为应用层的Log接入时,程序可以根据实际应用场景动态调整底层的日志实现框架(Log4j/LogBack/JdkLog...);


LogBack和Log4j都是开源日记工具库,LogBack是Log4j的改良版本,比Log4j拥有更多的特性,同时也带来很大性能提升。详细数据可参照下面地址:Reasons to prefer logback over log4j

       LogBack官方建议配合Slf4j使用,这样可以灵活地替换底层日志框架。

(note: 为了优化log4j,以及更大性能的提升,Apache基金会已经着手开发了log4j 2.0, 其中也借鉴和吸收了logback的一些先进特性,目前log4j2还处于beta阶段)

Logback的结构

       LogBack被分为3个组件,logback-core, logback-classic 和 logback-access.

其中logback-core提供了LogBack的核心功能,是另外两个组件的基础。

logback-classic则实现了Slf4j的API,所以当想配合Slf4j使用时,需要将logback-classic加入classpath。

logback-access是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口;

Slf4j+Logback的快速实践

spring-boot默认支持logback,所以无需引用任何以来只需要,配置application.properties即可,如果要功能丰富些,则配置下logback.xml。

一、在application.properties里配置的方式:

logging.file=./springboot.log

这是最简便的方法,默认级别是info,要改级别的话还要在appliacation.properties里增加一行 

logging.level.org.springframework.web=INFO


二、配置logback-spring.xml

在 src/main/resources 下面创建logback.xml (根据不同环境来定义不同的日志输出,那么取名为logback-spring.xml 即可,官方优先推荐使用-spring.*的配置方式)文件。

logback-spring.xml 文件:

1
2
3
4
5
6
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< configuration >
     < include  resource = "org/springframework/boot/logging/logback/base.xml"  />
     < logger  name = "org.springframework.web"  level = "INFO" />
  
  </ configuration >

在代码中调用:

1
2
3
import  org.slf4j.Logger;
import  org.slf4j.LoggerFactory;
private  Logger logger =  LoggerFactory.getLogger( this .getClass());

具体使用起来特别的简单,那么来解读一下配置文件。

配置文件解读:

logback-spring.xml文件:

1
2
3
4
5
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< configuration >
     < include  resource = "org/springframework/boot/logging/logback/base.xml"  />
     < logger  name = "org.springframework.web"  level = "INFO" />
</ configuration >

在这个文件定义了一个 捕获 org.springframework.web 的日志,日志级别是 INFO,上面引用的base.xml 文件内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<? xml  version = "1.0"  encoding = "UTF-8" ?>
<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->
  
< included >
     < includeresource = "org/springframework/boot/logging/logback/defaults.xml"  />
     < propertyname = "LOG_FILE" value = "${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}" />
     < includeresource = "org/springframework/boot/logging/logback/console-appender.xml"  />
     < includeresource = "org/springframework/boot/logging/logback/file-appender.xml"  />
     < rootlevel = "INFO" >
         < appender-refref = "CONSOLE"  />
         < appender-refref = "FILE"  />
     </ root >
</ included >

这个base.xml是Spring Boot的日志系统预先定义了一些系统变量:

       PID,当前进程ID{LOG_FILE},Spring Boot配置文件(application.properties|.yml)中logging.file的值,${LOG_PATH}, Spring Boot配置文件中logging.path的值 

       同时默认情况下包含另个appender——一个是控制台,一个是文件,分别定义在console-appender.xml和file-appender.xml中。同时对于应用的日志级别也可以通过application.properties进行定义:

如果在 logback.xml 和 application.properties 中定义了相同的配置(如都配置了 org.springframework.web)但是输出级别不同,则实际上 application.properties 的优先级高于 logback.xml *


多环境日志输出

根据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在 logback-spring.xml 中使用 springProfile 节点来定义,方法如下:

注意文件名称不是logback.xml,想使用spring扩展profile支持,要以logback-spring.xml命名】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< configuration >
     < include  resource = "org/springframework/boot/logging/logback/base.xml"  />
     < logger  name = "org.springframework.web"  level = "INFO" />
     < logger  name = "org.springboot.sample"  level = "TRACE"  />
    
     <!-- 测试环境+开发环境. 多个使用逗号隔开. -->
      < springProfile  name = "test,dev" >
         < logger  name = "org.springframework.web"  level = "INFO" />
         < logger  name = "org.springboot.sample"  level = "INFO"  />
         < logger  name = "com.kfit"  level = "info"  />
     </ springProfile >
  
    
     <!-- 生产环境. -->
     < springProfile  name = "prod" >
         < logger  name = "org.springframework.web"  level = "ERROR" />
         < logger  name = "org.springboot.sample"  level = "ERROR"  />
         < logger  name = "com.kfit"  level = "ERROR"  />
     </ springProfile >
    
</ configuration >

可以启动服务的时候指定 profile (如不指定使用默认),如指定prod 的方式为:

1
java -jar xxx.jar --spring.profiles.active=prod


总结

在Spring Boot 中记录日志只需两步: 

1、在 src/main/resources 下面创建logback.xml 文件,并按上面讲述的进行配置。 

或者使用最简单的方法在 application 配置文件中配置。 

2、在Java代码中创建实例,并在需要输出日志的地方使用。

1
2
3
4
5
6
7
8
// 在Java类中创建 logger 实例
private  Logger logger = LoggerFactory.getLogger( this .getClass());
// 在方法中使用日志输出,如
publicvoidlogTest() {
     logger.debug( "日志输出测试 Debug" );
     logger.trace( "日志输出测试 Trace" );
     logger.info( "日志输出测试 Info" );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring boot logback 配置 的相关文章

随机推荐

  • [Go 夜读 第 139 期] Go 语言 Excelize 开源基础库介绍

    Excelize 是 Go 语言编写的用于操作电子表格文档的基础库 支持 XLAM XLSM XLSX XLTM XLTX 等多种文档格式 高度兼容带有样式 图片 表 透视表 切片器等复杂组件的文档 并提供流式读写支持 用于处理包含大规模数
  • ERROR/WindowManager(***): Activity *** has leaked window com.android.internal.policy.impl.PhoneWind

    在做项目是遇到这个错误 google WindowManager Activity has leaked window 在stackoverflow com 链接http stackoverflow com questions 285057
  • Revit二次开发之“取得元素相交点IntersectionResultArray通过LocationCurve.Intersect()”...

    1 取得元素的曲线 比如风管 LocationCurve元素曲线 LocationCurve curve duct Location as LocationCurve 取得可以根据曲线确定位置的元素的曲线 2 根据曲线取得交点 Inters
  • 百度离线地图开发

    2D离线地图介绍 局域网环境下部署 完全脱离互联网 通过下载瓦片图 离线地图API js库 方式实现 一 2D离线瓦片下载 通过瓦片下载软件实现离线瓦片的下载 1 普通街道图瓦片 如下图 2 个性化瓦片 如下图 3 卫星图影像瓦片 如下图
  • Python学习:Selenuim+Python元素定位总结

    对象的定位应该是自动化测试的核心 要想操作一个对象 首先应该识别这个对象 一个对象就是一个人一样 他会有各种的特征 属性 如比我们可以通过一个人的身份证号 姓名 或者他住在哪个街道 楼层 门牌找到这 个人 那么一个对象也有类似的属性 我们可
  • Go语言学习-基本

    命名 如果是在函数外部定义 那么将在当前包的所有文件中都可以访问 名字的开头字母的大小写决定了名字在包外的可见性 如果一个名字是大写字母开头的 译注 必须是在函数外部定义的包级名字 包级函数名本身也是包级名字 那么它将是导出的 也就是说可以
  • 快速排序的递归实现和非递归实现

    一 快速排序的递归实现 快速排序的思想是每次找到一个元素的位置 再在以这个元素分隔的两个子范围中分别再各自确定一个元素的位置 子子范围也是如此操作 当某个子范围只有一个元素或者没有元素时 便不再做任何操作 这是一个递归过程 递归退出的边界就
  • 怎么判断map不为空

    示例代码 public static void main String args Map
  • (Oracle 基础篇) SQL 基础

    什么是SQL SQL 结构化查询语言 的主要功能就是在各种数据库建立联系 进行沟通 SQL语言分类 1 定义要在数据库存储那些信息的数据定义语言 DDL 主要针对对象 数据表 视图和索引 2 对数据库中的表进行操作的数据操作语言 DML 主
  • 视觉里程计2

    1 前言 为了克服特征点法的缺点 提出了以下几种思路 1 光流法 2 直接法 2 光流 2 1直接法 优化 最小化光度误差 实际上就是寻找全局像素误差总和最小的的情况 这种优化的理由仍然是灰度不变假设
  • Python函数练习题

    函数部分 1 编写一个名为collatz 的函数 它有一个名为number的参数 如果参数是偶数 那么collatz 就打印出number 2 如果number是奇数 collatz 就打印3 number 1 def collatz nu
  • javaee用户注册和登录界面源码

    JavaEE是一个企业级的 Java 应用程序开发平台 它提供了一组标准的技术和工具来帮助开发人员快速构建和部署企业级的 Java 应用程序 在 JavaEE 中 用户注册和登录界面可以使用 JSP Java Server Pages 技术
  • html文件存储服务,HTML5中五种存储方式的介绍

    本篇文章给大家带来的内容是关于HTML5中五种存储方式的介绍 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 h5之前 存储主要是用cookies cookies缺点有在请求头上带着数据 大小是4k之内 主Domain污染 主
  • pandas.DataFrame.groupby 按某列类型值将文件分为多个文件

    1 groupby pandas DataFrame groupby groupby函数使用映射器或一系列列对数据帧进行分组 groupby操作涉及拆分对象 应用函数和组合结果的某种组合 这可以用于对大量数据进行分组 并对这些分组进行计算操
  • 若依开发时指定el-dialog局部显示的方法

    第一步 实例化一个 el dialog 最外面的div就是ei dialog要显示的位置 div div
  • ajax、axios、fetch之间的区别与联系

    整理ajax axios fetch优缺点 简单总结 JavaScript是一门前端语言 AJAX是一门技术 它提供了异步更新的机制 使客户端与服务器间交换数据而非整个页面文档 实现页面的局部更新 jQuery是一个框架 它对JavaScr
  • React - 路由 lazyLoad 的使用(路由懒加载)

    React 路由 lazyLoad 路由懒加载 lazy是React提供的懒 动态 加载组件的方法 React lazy 路由组件代码会被分开打包 能减少打包体积 延迟加载首屏不需要渲染的组件 依赖内置组件Suspense标签的fallba
  • scau oj 10848 2021-11-06

    18048 自由落体 时间限制 1000MS 代码长度限制 10KB 提交次数 0 通过次数 0 题型 编程题 语言 G GCC VC Description 一个球从100米的高度自由落下 每次落地后弹起的原来高度的一半 计算并输出第n次
  • 海思3861环境搭建

    开发环境 ubuntu18 04 DOPI3861开发板 Q群 735884031 一 安装编译工具 1 按照官方文档下载编译工具并添加到环境变量中 https device harmonyos com cn docs start intr
  • spring boot logback 配置

    为什么要使用logback 在开发中不建议使用System out因为大量的使用会增加资源的消耗 因为使用System out是在当前线程执行的 写入文件也是写入完毕之后才继续执行下面的程序 而使用Log工具不但可以控制日志是否输出 怎么输