首页 > 解决方案 > 将 GC 日志与 Logback 集成

问题描述

我想将 GC 日志与我自己的基于 http 的 Logger 集成,以避免基于文件的日志记录。我关注了:http: //www.fasterj.com/articles/gcnotifs.shtml文章。从 JDK 7 开始,我们可以在 GC 事件上添加我们自己的侦听器,这工作正常。但我希望我的 gc 日志以与我们之前记录它的方式相同的方式打印。

如下所示。

    2019-11-04T10:12:33.754+0000:3.199:[GC 暂停(G1 疏散暂停)(年轻)
    所需的幸存者大小 50331648 字节,新阈值 15(最大 15)
    , 0.0300627 秒]
       [并行时间:18.2 ms,GC Workers:8]
          [GC Worker Start (ms): Min: 3198.9, Avg: 3198.9, Max: 3199.0, Diff: 0.1]
          [Ext Root Scanning (ms): Min: 0.7, Avg: 2.7, Max: 11.7, Diff: 11.0, Sum: 21.3]
          [更新 RS (ms):Min:0.0,Avg:0.0,Max:0.0,Diff:0.0,Sum:0.0]
             [已处理的缓冲区:最小值:0,平均值:0.0,最大值:0,差异:0,总和:0]
          [扫描 RS (ms):Min:0.0,Avg:0.0,Max:0.0,Diff:0.0,Sum:0.0]
          [代码根扫描(毫秒):Min:0.0,Avg:0.6,Max:2.6,Diff:2.6,Sum:4.5]
          [对象复制(毫秒):最小值:0.8,平均值:9.9,最大值:16.1,差异:15.3,总和:79.4]
          [终止(毫秒):Min:0.0,Avg:4.8,Max:5.6,Diff:5.6,Sum:38.6]
             [终止尝试:Min:1,Avg:1.0,Max:1,Diff:0,Sum:8]
          [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1]
          [GC Worker Total (ms): Min: 17.9, Avg: 18.0, Max: 18.1, Diff: 0.1, Sum: 143.9]
          [GC Worker End (ms): Min: 3216.9, Avg: 3216.9, Max: 3217.0, Diff: 0.1]
       [代码根修复:0.9 毫秒]
       [代码根清除:0.1 毫秒]
       [清除 CT:0.2 毫秒]
       [其他:10.8 毫秒]

所以我来自我可以打印的通知:

    次要 GC 结束:- 1342 ParNew(来自分配失败)26 毫秒;起止时间 67212728-67212754
    次要 GC 结束:- 1343 ParNew(来自分配失败)28 毫秒;起止时间 68412633-68412661
    主要 GC 结束:- 54 ConcurrentMarkSweep(来自 System.gc())147 毫秒;起止时间 68563369-68563516
    次要 GC 结束:- 1344 ParNew(来自分配失败)109 毫秒;起止时间 70212722-70212831
    次要 GC 结束:- 1345 ParNew(来自分配失败)39 毫秒;起止时间 71413175-71413214
    次要 GC 结束:- 1346 ParNew(来自分配失败)42 毫秒;起止时间 72013977-72014019

    公共无效句柄通知(通知通知,对象回传){
          //获取与该通知相关的信息
          //获取所有信息并漂亮地打印出来
          GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from((CompositeData) notification.getUserData());
          LOG.info(info.getGcAction() + ": - " + info.getGcInfo().getId()+ " " + info.getGcName() + " (来自 " + info.getGcCause()+") "+info .getGcInfo().getDuration() + " 毫秒;开始结束时间 " + info.getGcInfo().getStartTime()+ "-" + info.getGcInfo().getEndTime());
        }

标签: javagarbage-collectionlogback

解决方案


推荐阅读