java - 将 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()); }