如何将NLog中${gc:property=TotalMemory}的字节格式转换为MB?
解决NLog中GC内存日志转MB单位的问题
- 问题根源:直接对
${gc:property=TotalMemory}做除法报错,是因为这个渲染器输出的是字符串类型,无法直接进行数值运算,得用NLog的${math}渲染器来处理数值转换。 - 解决方案:用
${math}渲染器将字节数直接转换为MB,同时可指定小数格式优化日志可读性。
修改后的完整NLog目标配置如下:
<target xsi:type="File" name="MEM_LOG" fileName="${basedir}/SystemLog/${var:SystemId}_MEM_LOG_${var:KioskId}_${shortdate}.txt" encoding="utf-8" layout="${longdate}|${assembly-version:type=Assembly:format=major.minor.build.revision}|${var:KioskId}|${uppercase:${level}}|${threadid}|${callsite}|${callsite-linenumber}|${math:value=${gc:property=TotalMemory}:operation=/:operand=1048576:format=0.00}MB" />
配置细节说明:
1048576是1024*1024的结果,直接用这个值一步完成字节到MB的转换,比两次除以1024更高效。format=0.00指定保留两位小数,你可以根据需求调整格式(比如0表示取整,0.0保留一位小数)。- 如果偏好分步转换,也可以写成
${math:value=${math:value=${gc:property=TotalMemory}:operation=/:operand=1024}:operation=/:operand=1024:format=0.00}MB,最终效果与上面一致。
内容的提问来源于stack exchange,提问作者KIRPAL SINGH
相关产品推荐
相关产品推荐

