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

Logback日志框架使用示例

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

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


  ch.qos.logback
  logback-core
  1.2.10





  ch.qos.logback
  logback-classic
  1.2.10
@Test
public void demoA() {
    //通过Logger工厂对象动态获取我们具体导入的日志实现框架Logback
    //因为导入logback-classic坐标后会自动依赖传递SLF4J-api门面
    Logger logger = LoggerFactory.getLogger(LogbackDemo.class);
    //日志打印方式
    logger.error("[error  ] 最高级别程序错误");
    logger.warn(" [warning] 程序警告不会出现错误");
    logger.info(" [info   ] 程序info数据连接,网络连接,IO操作等");
    logger.debug("[debug  ] 一般在开发中使用,记录程序变量传递信息等等"); // 默认级别
    logger.trace("[trace  ] 记录程序所有的流程信息");
}
注:Logback因为和SLF4J API紧密结合,所以日志级别Level和SLF4J一样;
不指定配置文件则有默认配置文件日志级别:error > warning > info > debug > trace
  • Logback日志文件加载顺序
logback在启动的时候,会按照下面的顺序加载配置文
①:如果java程序启动时指定了logback.configurationFile属性,就用该属性指定的配置文件。
    如java -Dlogback.configurationFile=/path/to/mylogback.xml Test ,
    这样执行Test类的时候就会加载/path/to/mylogback.xml配置
②:在classpath中查找 logback.groovy 文件
③:在classpath中查找 logback-test.xml 文件
④:在classpath中查找 logback.xml 文件
⑤:如果是jdk6+,那么会调用ServiceLoader 查找com.qos.logback.classic.spi.Configurator接口的第一个实现类
⑥:自动使用ch.qos.logback.classic.BasicConfigurator,在控制台输出日志
注:上面的顺序表示优先级,使用java -D配置的优先级最高,只要获取到配置后就不会再执行下面的流程。
    相关代码可以看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各种日志框架 - 石家庄赵子龙 - 博客园

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章