sunyinjie / logger-tools

日志工具:主要是动态修改日志级别,方便日志级别切换调试代码~~Dynamically adjust the log level..

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

logger-tools 日志级别动态调整工具

初衷(背景)

在实际项目中,随着业务复杂度不断增加,生产环境出现任何小的变动,都会产生巨大影响。每一次客诉或者报警都需要开发人员快速定位问题,而有时通过review代码并不能快速响应,或者是有些问题在开发和测试环境不容易复现,甚至无法复现。

为了提高问题定位的效率,最有效的方式就是通过日志。如果日志打印的非常全,那对于定位排查有着相当大的帮助,但是这样也会带来日志量的暴涨,影响系统性能,在极端情况下,可能会宕机。

在这种背景或者说初衷下,写了简单的小工具,可以在解决线上问题时,实时调整生产环境日志级别,帮助开发们提高排查效率~~

能解决的问题

  1. 日志降级
  2. 比如业务依赖比较复杂,在某些特殊时段,下游服务故障。会产生大量错误日志,导致IO升高,CPU占用严重。从代码级别的修改到上线耗时长,在这种短时间内打印出海量错误日志,会快速耗尽buffer区内存,造成服务整体性能下降,严重时,还未来得及修复问题,日志就已经拖垮服务,造成宕机的情况下,可以通过这个工具, 快速调整日志级别。降低日志输出,达到日志降级的目的。给开发者争取充裕的问题修复时间。
  3. 线上调试
  4. 使用此工具,可以实时动态调整线上日志级别。减轻服务器负载压力,遇到问题需要排查时,可以临时降级,快速精准得到日志信息。

特点

  1. 低侵入
  2. 直接引入jar包,业务耦合度低
  3. 主流日志框架支持
  4. 兼容Log4j、Log4j2和Logback主流日志框架
  5. 可定制化处理
  6. 可以根据需求,做定制化处理,使用方式见下文

使用帮助

  1. 引入依赖
  2. 通过ChangeLogLevelProcess.process方法进行日志级别修改操作
  3. 推荐将该bean交给ioc容器管理。
    参数说明:
    1、String 类型入参,参数参照。。。,将所有logger统一设定为某个级别
    2、List 类型入参,指定logger设定级别
    3、null 空参,默认设置所有logger为默认级别(INFO),如果需要修改默认级别,可在ioc注入时修改defaultLevel的值,值参照 LogLevelConstant
  4. 可定制化处理
  5. 若需要其他定制化操作,请新建类继承AbstractLoggerProcess并实现其抽象方法

扩展

目前提供的仅是最底层的操作,在生产环境中使用,需要配合对应的客户端(web控制台或某些client)。如果是分布式应用,需要配合zookeeper这类工具对所有节点进行操作。在安全性方面,建议记录所有操作记录,并引入权限验证,确保开发者只能修改自己所负责的系统,同时把操作内容实时通知给所有相关负责人,避免误操作。

About

日志工具:主要是动态修改日志级别,方便日志级别切换调试代码~~Dynamically adjust the log level..


Languages

Language:Java 100.0%