git log 迁移

通过从您的应用程序学习企业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导览!

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

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

git log 迁移

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

  1. mysql 客户无感知迁移_亿级账户数据迁移,不用数据库工具还能怎么搞?

    原标题:亿级账户数据迁移,不用数据库工具还能怎么搞? 背景 在阿里巴巴内部"大中台,小前台"的组织和业务体制,使前线业务更加敏捷,赋能业务积极迎接未来挑战和机遇,在阿里大中台能力建 ...

  2. oracle mysql增量迁移_从自建Oracle迁移至RDS MySQL

    #本示例以名称为dtstest的数据库账号为例介绍授权命令,需要对PDB和CDB同时授权 #PDB授权示例: create user dtstest IDENTIFIED BY rdsdt_dtsac ...

  3. aws 数据库迁移_使用AWS进行数据库迁移

    aws 数据库迁移 The Agenda of this blog is to understand the different aspects of Data Migration. This blo ...

  4. keras神经风格迁移_知识分享 | 神经风格迁移-把每一张图片都变成自己喜欢的样子...

    原标题:知识分享 | 神经风格迁移-把每一张图片都变成自己喜欢的样子 有 爱 就 有 阳 光 灿 烂 虽然大家总是自嘲,但还是要开开心心的哦~ 选择了打工这条路,也就选择了终身学习 ,今天也让小编带领 ...

  5. 幼儿园案例经验迁移_多种形式培养幼儿的迁移讲述能力

    龙源期刊网 http://www.qikan.com.cn 多种形式培养幼儿的迁移讲述能力 作者:李萍 来源:<河南教育 · 基教版> 2011 年第 08 期 幼儿语言讲述活动中的迁移过 ...

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

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

  7. 两个git库之间迁移_从一个git仓库迁移代码到另一个git仓库(亲测有效版)(转)...

    不保留log等提交的记录的迁移就不说了,soeasy!代码复制粘贴就可以 目标:把A仓库的代码迁移到B仓库并且保存所有的git log,B仓库已经存在了哦,哪怕是个空仓库. 再说这个之前先说点其他.在 ...

  8. git 源代码自动检查_检查提交(git log,git show)《 Nest.js 应用案例:源代码管理 》...

    在之前克隆的这个项目所在目录的下面,执行 git log,这个命令可以查看在项目里做的所有的提交,英文是 commit.每一次提交都存储了项目的一个特定的状态. 就是在一次提交里面,会包含对项目的几处 ...

  9. java9 gc log参数迁移_个人文章 - SegmentFault 思否

    序 本文主要研究一下java9 gc log参数的迁移. 统一JVM及GC的Logging java9引进了一个统一的日志框架,对gc log的输出进行了统一的配置. 相关JEP(JDK Enhanc ...

最新文章

  1. WinForm 读写配置文件
  2. c/c++/MFC 调用 js 函数代码
  3. DeepLearning tutorial(1)Softmax回归原理简介+代码详解
  4. es if语法 script_熬夜7天,我总结了JavaScript与ES的25个重要知识点!
  5. macOS自带Python2.7删除之后的悲剧
  6. 基于Java+SpringBoot+vue+elementui的校园文具商城系统详细设计和实现
  7. OpenCV中反向投影
  8. Unity代码里的Position和界面上的Position
  9. 抖音检测注入框架分析
  10. jQuery事件与事件对象
  11. C# 打开CMD窗口并执行CMD 指令
  12. 关于PD协议的简要说明
  13. [Java反序列化]—SnakeYaml反序列化
  14. android应用市场汇总
  15. SRS系列一——实现RTMP直播
  16. webGIS学习(二)探究本质,WebGIS前端地图显示之地图比例尺换算原理 发布于 3 年前 作者 lzxue 7473 次浏览 来自 技术 1.没有豆浆机怎么办? 喝豆浆是我们早晨中基本
  17. PDF转换Word、Excel、PPT、图片,PDF去水印,PDF拆分该怎么做到这些
  18. RabbitMQ学习笔记:惰性队列(Lazy Queues)
  19. 计算机网络自顶向下方法,第7版—第1章习题
  20. TPR 教学法是什么?

热门文章

  1. 2020年首届算法竞赛网络挑战赛直播讲解课程
  2. 【学习笔记】浅谈短小可爱的左偏树(可并堆)
  3. 【网络流】最大流问题(EK算法带模板,Dinic算法带模板及弧优化,ISAP算法带模板及弧优化)上下界网络流
  4. P2048 [NOI2010] 超级钢琴(RMQ 贪心)
  5. 并查集:P1196 [NOI2002] 银河英雄传说
  6. P5268-[SNOI2017]一个简单的询问【莫队】
  7. jzoj3360-[NOI2013模拟]苹果树【树上莫队,LCA】
  8. 【jzoj】2018.2.7NOIP普及组——某【BC】组模拟赛
  9. MyBatis】MyBatis一级缓存和二级缓存
  10. Java自动化邮件中发送图表(三)之Highchart