网络知识 娱乐 认识java日志框架

认识java日志框架

大纲:

  • java日志发展历程
  • java日志框架分为实现类和门面类。
  • java日志框架关系
  • Logback取代Log4j的理由
  • Logback日志框架使用示例
  • Logback.xml 配置文件
  • java日志各种日志框架使用示例

java日志发展历程

认识java日志框架

强烈推荐阅读: 一个著名的日志系统是怎么设计出来的?

java日志框架分为实现类和门面类

现在,java日志框架分为实现类和门面类。

实现类日志框架:常见的日志输出框架有:log4j1,log4j2,logback,JUL等。

门面类日志框架有:slf4j,jcl(Apache Commons Logging),Spring-JCL,jboss-logging

java日志框架关系

推荐阅读: java日志框架简介(日志框架选型)_铑枪--突廆孒的博客-CSDN博客_java 日志框架

Logback取代Log4j的理由

logback和log4j是同一个作者,logback可以看作是log4j的升级版


logback是SpringBoot内置的日志处理框架,你会发现spring-boot-starter其中包含了spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。

1:更快的实现:Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小了。n2:非常充分的测试:Logback经过了几年,数不清小时的测试。Logback的测试完全不同级别的。n3:切换到log4j或者其他,非常容易,只需要提供成另一个jar包就OK ; n 而且因为logback-classic非常自然地实现了slf4j,所以切换到log4j或者其他,非常容易,只需要提供成另一个jar包就OK,n 根本不需要去动那些通过SLF4J API实现的代码。n4:非常充分的文档 官方网站有两百多页的文档。n5:自动重新加载配置文件,当配置文件修改了,Logback-classic能自动重新加载配置文件。n扫描过程快且安全,它并不需要另外创建一个扫描线程。这个技术充分保证了应用程序能跑得很欢在JAVA EE环境里面。n6:谨慎的模式和非常友好的恢复,在谨慎模式下,多个FileAppender实例跑在多个JVM下,能够安全地写到同一个日志文件。RollingFileAppender会有些限制。nLogback的FileAppender和它的子类包括RollingFileAppender能够非常友好地从I/O异常  中恢复。n7:配置文件可以处理不同的情况,开发人员经常需要判断不同的Logback配置文件在不同的环境下(开发,测试,生产)。n而这些配置文件仅仅  只有一些很小的不同,可以通过,和来实现,这样一个配置文件就可以适应多个环境。n8:Filters(过滤器)有些时候,需要诊断一个问题,需要打出日志。在log4j,只有降低日志级别,不过这样会打出大量的日志,会影响应  用性能。n在Logback,你可以继续 保持那个日志级别而除掉某种特殊情况,如alice这个用户登录,她的日志将打在DEBUG级别而其他n  用户可以继续打在WARN级别。要实现这个功能只需加4行XML配置。可以参考MDCFIlter 。n9:SiftingAppender(一个非常多功能的Appender):它可以用来分割日志文件根据任何一个给定的运行参数。如,SiftingAppender能够n  区别日志事件跟进用户的Session,然后每个用户会有一个日志文件。n10:自动压缩已经打出来的log:RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件。压缩是个异步过程,n  所以甚至对于大的日志文件,在压缩过程中应用不会受任何影响。n11:堆栈树带有包版本:Logback在打出堆栈树日志时,会带上包的数据。n12:自动去除旧的日志文件:通过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你可以控制已经产生日n  志文件的最大数量。如果设置maxHistory 12,那那些log文件超过12个月的都会被自动移除。

Logback日志框架使用示例

Logback 是由log4j创始人设计的另一个开源日志组件;可分为以下几个模块:

  • logback-core:其它两个模块的基础模块
  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access: 访问模块与Servlet容器集成提供通过Http来访问日志的功能

<!--Logback基础模块-->n<dependency>n <groupId>ch.qos.logback</groupId>n <artifactId>logback-core</artifactId>n <version>1.2.10</version>n</dependency>n<!--logback-classic是log4j改良版本,它完整实现SLF4J API,这样只要导入此坐标就可以和SLF4J API契合-->n<!--导入此坐标会自带依赖导入一个core基本包-->n<!--这个依赖直接包含了 logback-core 以及 slf4j-api的依赖-->n<dependency>n <groupId>ch.qos.logback</groupId>n <artifactId>logback-classic</artifactId>n <version>1.2.10</version>n</dependency>

@Testnpublic void demoA() {n //通过Logger工厂对象动态获取我们具体导入的日志实现框架Logbackn //因为导入logback-classic坐标后会自动依赖传递SLF4J-api门面n Logger logger = LoggerFactory.getLogger(LogbackDemo.class);n //日志打印方式n logger.error("[error ] 最高级别程序错误");n logger.warn(" [warning] 程序警告不会出现错误");n logger.info(" [info ] 程序info数据连接,网络连接,IO操作等");n logger.debug("[debug ] 一般在开发中使用,记录程序变量传递信息等等"); // 默认级别n logger.trace("[trace ] 记录程序所有的流程信息");n}n注:Logback因为和SLF4J API紧密结合,所以日志级别Level和SLF4J一样;n不指定配置文件则有默认配置文件日志级别:error > warning > info > debug > trace

  • Logback日志文件加载顺序

logback在启动的时候,会按照下面的顺序加载配置文n①:如果java程序启动时指定了logback.configurationFile属性,就用该属性指定的配置文件。n 如java -Dlogback.configurationFile=/path/to/mylogback.xml Test ,n 这样执行Test类的时候就会加载/path/to/mylogback.xml配置n②:在classpath中查找 logback.groovy 文件n③:在classpath中查找 logback-test.xml 文件n④:在classpath中查找 logback.xml 文件n⑤:如果是jdk6+,那么会调用ServiceLoader 查找com.qos.logback.classic.spi.Configurator接口的第一个实现类n⑥:自动使用ch.qos.logback.classic.BasicConfigurator,在控制台输出日志n注:上面的顺序表示优先级,使用java -D配置的优先级最高,只要获取到配置后就不会再执行下面的流程。n 相关代码可以看ContextInitializer#autoConfig()方法。


核心组件介绍:

  • Logger: 作为日志的记录器,把它关联到应用的对应的context后,主要用于存放日志对象,也可以定义日志类型、级别。详解可以见log4j logger
  • Appender: 主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、MySQL、PostreSQL、Oracle和其他数据库、JMS和远程UNIX Syslog守护进程等。
  • Layout : 负责把事件转换成字符串,格式化日志信息的输出
  • filter: Filter主要应用在appeder上,只在appender级别起作用,起到过滤日志相关作用。

Appender和Layout 并不关心Logger的存在,不依赖于Logger,同时也能看出,Logger 会依赖于Appender 和 Layout 的协助,日志信息才能被正常打印出来。


Logback.xml 配置文件

最基本的配置是一个configuration里面有零个或多个appender,零个或多个logger和最多一个root标签组成。(logback是对大小写敏感的)

认识java日志框架

logback 配置文件组成

详情可参考logback 官方文档: Logback Manual

logback-中文手册: logback-中文手册_keep-go-on的博客-CSDN博客_logback中文文档


java日志各种日志框架使用示例

参考文章: 带你掌握Java各种日志框架 - 石家庄赵子龙 - 博客园