一、日志框架简单分类介绍
java常用的日志框架、可以分为两组:
1、JCL、JUL、Log4j;
2、SLF4J、Log4j2、Logback;
其中第一组是比较早期的日志实现框架,JCL并不是具体的日志实现框架,JCL其实是定义了一套日志接口,具体实现则由 Log4j 或 JUL 来完成。也就是说JCL负责命题,然后Log4j、JUL负责实现。
第二组是目前比较流行的框架,其中SLF4J也不是具体的实现,而是一套日志门面像JCL一样,专门负责命题,然后Log4j2、Logback负责实现,具体的方法。后来SLf4J也兼容了JUL、Log4j。
日志门面:只提供日志相关的接口定义,即相应的 API,而不提供具体的接口实现。日志门面在使用时,可以动态或者静态地指定具体的日志框架实现,解除了接口和实现的耦合,使用户可以灵活地选择日志的具体实现框架。
日志系统:与日志门面相对,它提供了具体的日志接口实现,应用程序通过它执行日志打印的功能。
二、JUL
JUL全称Java Util Logging,是Java原生的日志框架,使用时不需要另外引入第三方类库,相对于其他日志框架来说其特点是使用方便,能够在小型应用中灵活应用。但JUL日志框架使用的频率并不高,但一旦需要解除此类的代码,仍然要求开发人员能够迅速看懂代码,并理解。
1、框架结构图:
Loggers:被称为记录器,应用程序通过获取Logger对象,调用其API来发布日志信息,Logger通常是应用程序访问日志系统的入口程序; Appenders:也被称为Handlers,每个Logger都会关联一组Handlers,Logger会将日志交给关联的Handlers处理,由Handlers负责将日志记录;Handlers在此是一个抽象类,由其具体的实现决定日志记录的位置是控制台、文件、网络上的其他日志服务异或是操作系统日志; Layouts:也被称为Formatters,它负责对日志事件中的数据进行转换和格式化,Layouts决定了记录的数据在一条日志记录中的最终显示形式; Level:每条日志消息都有一个关联的日志级别。该级别粗略指导了日志消息的重要性和紧迫,可以将Level和Loggers或Appenders做关联以便于我们过滤消息; Filters:过滤器,根据需要定制哪些信息会被记录,哪些信息会被放过。 一个完整的日志记录过程如下:用户使用Logger来进行日志记录的行为,Logger可以同时持有若干个Handler,日志输出操作是由Handler完成的;在Handler输出日志前,会经过Filter的过滤,判断哪些日志级别放行、哪些拦截,Handler会将日志内容输出到指定位置(日志文件、控制台等);Handler在输出日志时会使用Layout对日志内容进行排版,之后再输出到指定的位置。