文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

你真的懂java的日志系统吗

2024-04-02 19:55

关注

一、背景

在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干的一件事,同时系统正常运行过程中必要的日志打印也是必须的。

二、详情

在笔者刚接触java程序的时候,打印日志经常使用到到下面的代码,

System.out.println("hello log");

我相信在不了解日志系统的前提下使用上述的方式是最多的,同时也是新手小白最常用的方式,笔者曾经也是使用最多的。那么除了上述的方式还有其他的方式吗?答案是肯定的

2.1、java自带的日志

在java的API中提供了一套日志打印的方法,java程序人员在设计之初已经想到了这方面的功能,所以从JDK1.4起提供了日志打印的API,只不过被大多数人忽略了。这套API在java.util.logging包下,使用该种方式不需要引任何的jar,只要在java环境下即可使用。

如上图,是java提供的日志的一些类。使用方法类似下面的代码,

public static Logger logger=Logger.getLogger(Test.class.toString());
logger.info("hello log");

注意Logger的路径是java.util.logging.Logger。

2.2、log4j

log4j是apache的一个项目,其中又分为log4j1和log4j2,所谓log4j1指的就是其大版本号为1,不过log41在很早之前就已经停止更新了,源码官网:https://github.com/apache/logging-log4j1

可以看的在2012年已经停止更新了,也就是说现在通常来说使用的log4j都是log4j2,更确切的说是log4j,为了准确期间,这里还是和之前的版本进行区分,使用log4j2的名字,log4j2是在log4j1基础上的升级,并吸收了logback这个框架的优秀之处且修复了其很多问题,可以说log4j2是一个优秀的日志框架,其源码官网:https://github.com/apache/logging-log4j2

官网:https://logging.apache.org/log4j/2.x/index.html

log4j2的maven依赖如下,引入log4j-api和log4j-core即可,

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.17.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.1</version>
  </dependency>

这里有个问题要注意,log4j1和log4j2的groupId是不一样的,log4j1的是org.apache.log4j,log4j2的是org.apache.logging.log4j,带来的变化就是在使用的过程中要注意引用的类的路径,从路径上可以确定是使用的log4j1.x还是log4j2.x,如果是org.apache.log4j开头的包路径那么是版本1的,是org.apache.logging.log4j开头的是版本2的。

使用方式类似如下,

private static final Logger logger= LogManager.getLogger();
logger.info();

2.3、logback

logback是一个开源的日志框架,是log4j的作者为了代替log4j而开发的。logback包含三部分,logback-core、logback-classic、logback-access,logback-core是其他两个模块的核心,常用到的是logback-core+logback-classic。logback-access常和jetty和tomcat结合。

logback的groupId为ch.qos.logback,其maven依赖如下

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.10</version>
  </dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.10</version>
  </dependency>
<!--平时用不到,可不引入-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.2.10</version>
  </dependency>

使用方法可参考:https://www.jianshu.com/p/3e3b550920b3

其官网:https://logback.qos.ch/index.html

2.4、slf4j

slf4j不能称之为一个日志框架,因为它仅仅提供了一系列的标准,提供一系列接口,但没有实现,采用的是门面模式。

其依赖为:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.36</version>
  </dependency>

上面便是slf4j的核心包。

注意:如果使用slf4j出现下面的日志

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

说明没有日志实现框架,slf4j自己实现了一个日志框架,可以加上下面的依赖

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.36</version>
  </dependency>

slf4j可以和其他具体的日志实现框架进行结合使用,如下

上图是一个slf4j和其他日志框架结合的图形展示,

slf4j+logback

需要slf4j-api、logback-api、logback-classic三个包

slf4j+JDK日志

需要slf4j-api、slf4j-jdk14,其中slf4j-jdk14是slf4j和JDK日志结合的jar。

slf4j+log4j

需要slf4j+slf4j-log4j12

slf4j+JCL

需要slf4j、common-logging

其官网:https://www.slf4j.org/

2.5、JCL

JCL是Jakarta Commons Logging的简写,又叫Apache Commons Logging,提供的是一个 Java 的日志接口,同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现。

其包为common-logging.jar包含了所有的功能,还有其他另外两个包common-logging-api、common-logging-adapters

官网:https://commons.apache.org/proper/commons-logging/guide.html

三、总结

本文简单总结了java中常用的日志,其中slf4j和JCL是日志的接口,又都进行了简单实现,既可以自己单独使用,又可以和其他实现日志框架结合使用,如,log4j、logback、JDK logging等。

到此这篇关于java日志系统的文章就介绍到这了,更多相关java日志系统内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯