技术文章您的位置:真钱21点赢钱,手机版21点游戏下载 > 技术文章 >
技术文日志框架使用技巧分享
发布时间:2020-05-24 09:42

  日志通常用于线上问题追踪,协助定位业务问题或程序问题,以及基于日志的业务逻辑统计分析等。

  Simple Logging Facade for Java,缩写Slf4j。这是一套日志的接口。本身不包含日志的实现。slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback等)。

  Apache Log4j是一个基于Java的日志记录框架。现在是Apache软件基金会的一个项目。Log4j是几种常见Java日志框架之一,出现年代较早。

  logback是由log4j创始人设计的又一个开源日志组件。在性能和架构上较log4j有着很大程度上的改进,并且logback是SpringBoot框架(1.x和2.x)默认集成的日志实现框架。

  Apache Log4j2是对log4j的升级,它比其前身Log4j1提供了重要的改进。并提供了Logback中可用的许多改进,同时修复了Logback体系结构中的一些固有问题。可以认为log4j2是logback的加强版。

  appender是一个管道,负责将日志事件写入到对应的目标载体(保存位置),可以通过配置不同的appender,将日志输出到控制台、文件、数据库、邮件服务器等等。

  logger是程序中的日志收集器,用于收集程序中的日志,简单说logger就是一个路由器,指定类、包中的日志信息流向哪个管道,以及控制他们的流量(日志级别)。

  通常来说,一个logger可以对应多个appender,来达到将日志输出到多个目标的目的。

  ogger的常见访问修饰符是protected和private,访问修饰符决定了logger可以在什么样的范围内使用。

  业务代码的java类中定义的getLogger(“xxx”),实际上标定了logger的名字叫什么。但是仅仅定义了名字还不够,我们必须将xxx这个logger名字与log4j2配置文件中的Logger定义的名字对应。

  完成了这一步操作以后,就达成了代码中的logger标定,与配置文件中的logger定义的连结,再加上Logger与appender的对应关系,实际上就做到了,将指定的日志输出的特定位置的闭环。

  在完成了第4步的操作的基础上,为每个特定模块指定对应的输出文件位置就可以达到我们的目标。

  logger配置中可以指定additivity属性,这个属性为true时,输出的日志不仅会在定义的appender中输出,同时将会在console输出一份。

  首先在filePattern中指定压缩日志的路径,并在文件命中使用%d{yyyy-MM-dd}的日期配置。

  如果想按照小时分割,则可以指定日期格式为%d{yyyy-MM-dd-HH}。

  DefaultRolloverStrategy指定了最多可以生成多少个文件,则最大日志文件大小 = 配置的模块数 * 单个文件最大容量 * 最大文件个数。

  DEBUG:代码关键中间状态或计算结果/代码关键分支标识debug。例如:过账过程中,数据校验代码验证通过

  INFO:业务正常执行完毕/业务阶段性执行完毕info。例如:单据保存执行完毕

  WARN:业务异常warn/业务错误error。例如:登录失败/提交过账的单据数据不合业务要求等

  除了上述情况,在实际代码编写过程中,要求应该对所有代码退出执行的出口输出一条级别合适的日志,用以跟踪的代码执行流程。包括程序正常执行完毕时,出现代码异常或业务异常退出时等。

  1. 日志可以适当的输出部分运行期间的参数,用来在大量日志中快速区分和定位目标操作。例如出库业务中输出的日志可以将运行期的出库单号作为标识性的日志变量参数,与日志一同输出。

  可以用来实现分布式环境下的日志收集、存储、高效检索、日志统计、日志可视化展示等。

  当我们按照实战技巧中的操作流程来规范日志输出,每一条日志就变得具有实际意义。

  再结合ELK框架的使用,可以帮助我们分析很多场景,继而根据日志来为我们提供决策上的支持。

  例如,可以结合tomcat或Nginx的访问日志来判断用户在实际使用时,哪些模块或功能使用频度较高,哪些功能容易出现错误提示等等。

  也可以通过编程方式,创建ConfigurationFactory和配置实现。(不推荐)

  在写日志的时候,需要谨记日志会充斥在大量的其他日志中,并且会有多线程导致的日志输出不连续的情况。

  输出的日志需要服务于我们自身。这就要求每一条日志要有一些特异性,能够区别于其他日志,并能够迅速从大量数据中检索得到所需要的日志。

  同时要求日志本身能够有效反映出程序的运行情况,对排查错误和维护程序起到作用。