在程序运行的过程中,我们需要在重要的代码逻辑分支点,将关键的程序运行状态信息打印出来,便于我们对程序调试和观察。java项目中有成熟高性能的日志框架,很方便地集成到项目中实现我们对关键信息的打印输出。

当前java主流的日志框架有logback、log4j2、log4j1、jul等。

日志框架

简介

logback

Ceki Gulcu于2006年设计的又一个开源日志框架,解决log4j1性能问题,目标是替代log4j1

log4j1

Ceki Gulcu于2000年设计的日志框架,Apache开源项目,目前已不再维护

log4j2

2010年起Apache开源项目,参考logback,解决log4j1设计缺陷及性能问题。采用LMAX Disruptor高性能线程间消息库,据官方性能测试比logback高。

jul

java.util.logging

Since JDK1.4.0 2002年发布

日志门面框架主要有SLF4J(Simple Logging Facade for Java)、JCL(Jakarta Commons Logging)。日志门面是日志输出的抽象接口,具体日志操作实现还需要调用具体的日志框架,日志门面框架可以方便地切换具体的日志框架,而无需修改代码。SLF4J支持logback、log4j1、logj2、jul,而JCL仅支持log4j1、jul。目前SLF4J比JCL流行,SpringBoot项目默认引入SLF4J+logback日志框架。

应用项目中如何统一日志输出呢?

在java项目中我们经常会引入不同的组件类库,这些组件类库有使用到的日志框架也不尽相同,不过最新的组件类库一般都使用了日志门面框架,由开发者根据项目情况引入具体的日志框架。如Spring框架、Fastjson组件等使用JCL门面日志框架,而Mybatis、Quartz等常见组件默认使用SLF4J。下面我们就SLF4J如何统一日志框架进行说明。

下图为SLF4J官网给出的技术原理图:

如上图,jcl日志通过jcl-over-slf4j.jar桥接将日志输出到slf4j-api,进而由具体的日志框架输出;类似的,log4j1通过log4j-over-slf4j.jar桥接,jul日志通过jul-to-slf4j.jar桥接,而最新的log4j2通过log4j-to-slf4j.jar进行桥接。

具体的pom.xml配置如下(参考):

注:未引入jcl-over-slf4j.jar,是因为jcl在没有引入log4j1时,默认使用jul输出日志,最终由jul-to-slf4j.jar进行桥接到slf4j上。

Springboot自动引入的日志框架

当创建Springboot项目,通过pom继承spring-boot-starter-parent,或项目中引入spring-boot-starter-web等jar时,则项目会自动默认引入spring-boot-starter-logging,通过分析其pom依赖:

1.5.9.RELEASE:

2.0.0.RELEASE

1

spring-boot-starter-logging默认使用logback日志框架

2

springboot logging已自动将日志统一到logback日志框架

3

spring-boot-starter-logging 2.0.0之后的版本,都移除了log4j1遗留日志兼容问题(毕竟log4j1不维护以很久,许多主流框架类库已采用其他日志框架),而增加了log4j2桥接到logback的配置

综上分析,只要Spingboot项目引入了spring-boot-starter-logging,即可将项目日志统一到logback日志框架,从而可灵活控制日志的输出格式或者归集日志到统一的日志中心。

Java项目如何统一日志框架?相关推荐

  1. hive 查看 job 日志_日均TB级数据,携程支付统一日志框架

    一.背景 支付中心作为携程集团公共部门,主要负责的业务包括交易.实名绑卡.账户.收单等,由于涉及到交易相关的资金流转以及用户实名认证,部分用户操作环节的中间数据应内控/审计要求需要长时间保存.当前研发 ...

  2. Spring Boot统一日志框架

    在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析.在 Java 领域里存在着多种日志框架,如 JCL.SLF4J.Jboss-logging.jUL.log4j. ...

  3. 12. Spring Boot统一日志框架

    在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析.在 Java 领域里存在着多种日志框架,如 JCL.SLF4J.Jboss-logging.jUL.log4j. ...

  4. C#项目中使用日志框架Log4net

    C#项目中使用日志框架Log4net 背景 准备条件 日志服务简单封装 使用封装的服务类记录日志 配置文件App.config/Web.config 背景 无论是软件的开发期间还是发布后的运维期间,日 ...

  5. Java中常见的日志框架

    可能是太过于常见了,所以使得大家很少关注,只是要用到的时候复制粘贴一份就行,甚至连日志配置文件中的配置语法都不清楚.另外一方面,Java中提供的日志组件太多了,一会儿log4j,一会儿logback, ...

  6. 项目中统一日志文件配置

    1.统一日志处理的目的: 将日志记录在文件中,方便运维和开发做错误排查 文件日志需要做滚动输出(输出到更多的日志文件中),避免单日志体积过大,拖垮服务器 可以方便的在开发环境和生产环境等环境中切换输出 ...

  7. 当当网java项目_基于S2SH框架开发当当网项目

    这是一个当当网的示例源码,本人也是从网上下载下来进行学习的,收获良多,特此分享给各位大牛.采用的是S2SH框架,基本上的功能都实现了.比如注册,登陆,发送邮件等等.项目包里面有项目安装说明,相信各路大 ...

  8. Java项目:基于ssm框架个人博客系统多用户(计算机毕业设计)

    本系统实现个人博客的主要基本功能有主界面,用户注册,用户登录,发表文章,浏览文章,发表评论等.这里主要是区分了个人博客的注册用户和游客.注册用户,可以在任何时候写下自己的主张,记录下自己的点点滴滴.而 ...

  9. java项目开发实例SSM框架实现的车位租赁管理系统|停车场计费系统

最新文章

  1. 代理模式详解(静态代理和动态代理的区别以及联系)
  2. Android之从网络上获取图片的两种方式讲解:thread+handle和AsyncTask方式
  3. 暗黑破坏神(背包)(内部模拟)
  4. Python基于值的内存管理真相
  5. 第 21 章 中介者模式
  6. input数字开头不能为0_Python新手上车5:数字和注释
  7. sshd启动报错解决:Missing privilege separation directory: /run/sshd
  8. mysql 虚拟表 分页_MySql大表分页(附独门秘技)
  9. 基姆拉尔森计算公式---计算星期几
  10. redis数据类型之List
  11. [转载] 科学家开发的新AI因过于危险而不敢发布
  12. Flutter与原生混合开发
  13. matlab景深合成算法,关于景深合成,你想知道的都在这儿!
  14. 51Nod 1677 treecnt
  15. 充电站网络安全风险危及电动汽车普及
  16. Python进行微信公众号开发
  17. Codeforces Round #717 Div.2
  18. powermock跳过某方法_PowerMock使用详解
  19. Elasticsearch - 压测方案之 esrally 简介
  20. 翻转课堂融入计算机课,“翻转课堂”教学模式在职业院校计算机课程中的应用...

热门文章

  1. EDM营销的关键是什么
  2. 【AcWing 学习】图论与搜索
  3. Java多线程:synchronized | Volatile 和Lock和ReadWriteLock多方位剖析(一)
  4. 网络socket编程--多路复用
  5. Tesseract 教程
  6. 自己整理的scratch说课讲义
  7. 计算机专业需要盲打,计算机盲打的技巧与方法【听看打练习】
  8. 《蜡烛人》制作人高鸣:如何原汁原味的将主机游戏移植到手机平台
  9. B站秋招编程题:扭蛋机
  10. PoetryGenerator的参数