通过从应用程序中学习企业APM产品,发现更快,更高效的性能监控。 参加AppDynamics APM导览!

与许多Java应用程序一样,AppDynamics Java代理广泛使用日志记录。 多年来,我们一直使用Log4J作为日志记录框架。 虽然Log4J的最新版本是2012年–并且Apache基金会于2015年8月宣布Log4J的生命周期终止 –但我们没有升级到Log4J2,因为需要维护对Java 5 VM和其他竞争优先级的支持。 。 但是,我们最近从整体存储库转移到特定于产品的存储库使升级成为可能。

Log4J2充满了诱人的功能。 例如,该框架通过提供无垃圾记录,极大地提高了记录速度并减少了内存使用。 通过对异步日志记录的本机支持,我们可以进一步减少在客户应用程序上运行时花费在日志记录上的时间。 由于压缩也是本机功能,因此我们的代理可以承受更多日志记录,同时减少文件存储需求。 这两个功能使我们能够添加更频繁,质量更高的日志记录,其中包含可为我们的客户成功提供可行信息的信息,以及可帮助客户的开发团队。

迁移目标和挑战

那么,我们想通过迁移完成什么? 在迁移过程中我们面临什么挑战?
让我们从挑战开始:

–我们必须对框架包进行命名空间,以将Log4J的使用与客户的日志记录框架隔离开来,并且我们还需要使源Java 5兼容,因为标准Log4J2需要Java 1.6及更高版本。

–由于几乎每个班级都使用日志记录,因此我们必须找到一种方法来使这些更改递增,并且(相对)易于检查,以保持生产监控代理所需的高质量。

–万一Log4J2初始化失败,我们必须能够使用Log4J(已被证明可以工作)。
我们的首要目标是用Java 5兼容源重新打包jar。 这一步很容易。 我们以编程方式重构了所有类,以为其包命名空间。 我们手动修复了一些涉及仅Java 6及更高版本支持的API的问题,例如String.isEmpty()。

第二步是在兼容环境中测试框架。 我们使用了一个已安装Java 5的docker容器,并创建了一个反映我们代理结构的测试应用程序。 这一步很耗时,因为我们需要弄清楚配置和自定义如何与我们的代理一起使用。 例如,我们拥有的功能之一就是代理错误安全性。 如果代理代码遇到太多内部错误,我们将使日志静音并删除检测。 我们拥有的另一个功能是重用节点名称。 我们缓冲日志事件,仅在从UI知道节点名称后,才将其写入文件。 使用测试应用程序,我们能够模拟所有这些功能,为迁移做准备。

为了实现可逆性,我们仍然同时存在两个框架。 我们使用桥接模式将日志记录提取到单独的共享包中。 这使我们在代码库中拥有多个日志记录框架,并且我们可以在运行时轻松地在它们之间进行切换。 它还允许我们将来升级日志记录框架,从而提供高度的灵活性和可变性。 这一步很重要,因为我们必须更改构建脚本并更改使用记录器的每个文件。

最后,我们简单地移动了从第二步创建的自定义附加程序的Log4J2版本,复制了配置代码,并由此成功地升级了日志记录框架!

4.4中的Log4J2日志关联支持

在使用Log4j2时,我们还借此机会在日志关联功能中增加了对它的支持。
日志关联使用户可以在其日志附加器模式中指定一个地点,以便我们在运行时插入我们的业务交易(BT)请求guid。 在BT上下文中对记录器的任何调用都将动态地插入guid,而不管该行最终是在文件中还是在控制台中结束。

这些向导在日志输出中的存在可增强日志处理应用程序的功能,包括我们自己的Log Analytics产品,还包括诸如Splunk之类的其他产品。 使用它们,我们可以将单个交易记录的任何行与我们在APM端针对该请求收集的快照数据相关联,而无需对客户应用程序进行任何更改。 相反,它也使我们Controller的用户可以轻松地从BT快照过渡到日志中该BT请求期间发生的确切行。

除了对Log4J2的新支持之外,受支持的日志记录框架还包括Log4J,Logback和Slf4J。

最后的想法

首先,要进行产品范围的升级是一项艰巨的任务。 但是,一旦分解成小的独立步骤,它将变得更加易于管理。 运行10k似乎比运行10个1ks困难。 升级进行得很顺利,因为每一步都对产品进行了更改,同时保持了产品的功能性并准备好发货。 这对于更快地进行构建验证和代码审查是有好处的。

要了解更多信息,请参阅有关业务交易和日志关联的文档。 想了解AppDynamics Log Analytics的工作原理吗? 立即开始免费试用 。

通过从应用程序中学习企业APM产品,发现更快,更高效的性能监控。 参加AppDynamics APM导览!

Li Haojun Li是此博客文章的合著者。 Haojun是一位软件工程师,已经在AppDynamics工作了大约5个月。 他是加州大学伯克利分校的应届毕业生,拥有计算机科学和统计学学位。 周末期间,他喜欢在道路上航行和骑自行车。

翻译自: https://www.javacodegeeks.com/2018/03/tales-from-the-field-migrating-from-log4j-to-log4j2.html

现场故事:从Log4J迁移到Log4J2相关推荐

  1. git log 迁移_现场故事:从Log4J迁移到Log4J2

    git log 迁移 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 与许多Java应用程序一样,AppDynamics Java代理广泛 ...

  2. 开发log4j配置_从 log4j 迁移到 logback

    最近把项目的日志框架从 log4j 迁移到 logback,过程里遇到很多坑,记录下来 目标 本次迁移的目标就是用 slf4j+logback 的日志框架来取代目前的 slf4j+log4j 如何迁移 ...

  3. log4j升级为log4j2(无需改动代码)

    log4j升级为log4j2(无需改动代码) 1 .删掉项目中存在的Log4j1.x的jar包,添加log4j2的jar包; 2.添加log4j和log4j2的连接包log4j-1.2-api-2.x ...

  4. log4j升级到log4j2 spring

    目录 基础知识 日志系统对应的jar包和推荐依赖 pom.xml 代码可能要修改的地方 log4j2的配置文件 个人问题杂记 去掉父工程的依赖 log4j2异步日志包缺失时报错 mybatis-spr ...

  5. linux上设置了log4j没有产生日志文件_关于 log4j 升级到 log4j2 的小结

    关于升级 jar 包等前提要求 删掉原先的 log4j-1.XX 等 jar 包 从 1.XX 升级到 2.XX 平稳升级需要的 jar 包,其中包括用 sl4j-1.7.25 (1.7.21 暂时也 ...

  6. apche的log4j.properties和log4j2.xml的配置和使用

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录. apache下载log4j:https://logging.apache.org/log ...

  7. spring、springboot集成 log4j日志、log4j2日志以及slf4j

    1.查看pringboot自带的日志框架 新建一个springboot 工程,查看依赖树 通过查看依赖树可以发现,springboot自带被loggong管理的log4j .logback等日志相关的 ...

  8. log4j升级为log4j2(不需要改动代码)

    公司的项目决定升级log4j,因为log4j2有一个自动删除日志的功能,这样可以减轻运维的一些工作,而且在多线程环境下,log4j2的异步日志系统比log4j和logback提高了十倍的性能(吞吐量和 ...

  9. 漫画:应用程序被拖慢?罪魁祸首竟然是Log4j!

    作者 | 漫话编程 来源 | 漫话编程(ID:mhcoding) 之前一段时间,因为我们发现的一个 SaaS 应用程序会间歇性地卡顿.变慢,因为很长时间都没有定位到原因,所以解决的办法就只能是重启. ...

最新文章

  1. 文件名有规则情况读取
  2. ThreadLocal使用
  3. Windows安装配置tidevice
  4. 【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )
  5. 《分布式系统》教学大纲
  6. 我的第一份工作 (2007.2.28--2008.2.28) 上海三高计算机中心有限公司
  7. 喝酒划拳中的数学(附:摇号)
  8. php实现单例模式类singletonv,php设计模式 singleton (单例模式)
  9. 公司内部z区域网络升级可行性方案
  10. matlab2c使用c++实现matlab函数系列教程-nchoosek函数
  11. 一个磁力API接口,可自动将磁力链接转换成种子文件提供下载,并返回磁力和磁力对应的种子的详细信息
  12. 网易云linux版本如何安装包,网易云音乐Linux版提供64位和32位ubuntu16.04安装包
  13. Python 随机抽奖
  14. 计算机需要无线网卡进行网络连,usb无线网卡怎么用详细步骤
  15. mcafee 8.5i杀毒软件规则配置
  16. java解压加密的7z格式文件
  17. 使用node连接MongoDB的工具安装及配置
  18. IntelliJ IDEA 2020.3怎么设置成中文汉化
  19. 无法安装冰点还原_PC整机备份与还原教程 Active Backup for Business
  20. 2021年中国纱线行业产量、进出口及经营规模情况分析[图]

热门文章

  1. 2017西安交大ACM小学期数论 [水题]
  2. Nginx动静分离实现负载均衡
  3. 分布式锁的多种实现方式
  4. Shell入门(三)之字符串
  5. Ribbon 客户端负载均衡
  6. Springboot 2.x 单元测试 JUnit 5
  7. HBase的hbase shell 详解
  8. linux安装mysql遇到的问题_Linux下安装MySQL5.7及遇到的问题解决方法
  9. (转)公钥,私钥和数字签名这样最好理解
  10. kafka控制器,复制与存储小结