Repository URL to install this package:
|
Version:
0.7.0 ▾
|
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const util=require("util"),shimmer=require("shimmer"),requireHook=require("../../../util/requireHook"),tracingUtil=require("../../tracingUtil"),constants=require("../../constants"),cls=require("../../cls");let isActive=!1,levels;function saveLevelsRef(levelsModule){"function"==typeof levelsModule.getLevel&&null!=levelsModule.INFO&&(levels=levelsModule)}function instrumentLog4jsLogger(loggerModule){shimmer.wrap(loggerModule.prototype,"log",shimLog)}function shimLog(originalLog){return function(level){if(cls.skipExitTracing({isActive:isActive,log:!1}))return originalLog.apply(this,arguments);level=levels&&levels.getLevel(level,levels.INFO);if(null==level||"number"!=typeof level.level||level.level<3e4)return originalLog.apply(this,arguments);var originalArgs=new Array(arguments.length);for(let i=0;i<arguments.length;i++)originalArgs[i]=arguments[i];return instrumentedLog(this,originalArgs,originalLog,4e4<=level.level)}}function instrumentedLog(ctx,originalArgs,originalLog,markAsError){return cls.ns.runAndReturn(()=>{let message;message=2===originalArgs.length&&"string"==typeof originalArgs[1]?originalArgs[1]:util.format(...originalArgs.slice(1));var span=cls.startSpan("log.log4js",constants.EXIT);span.stack=tracingUtil.getStackTrace(instrumentedLog),span.data.log={message:message},markAsError&&(span.ec=1);try{return originalLog.apply(ctx,originalArgs)}finally{span.d=Date.now()-span.ts,span.transmit()}})}exports.init=function(){requireHook.onFileLoad(/\/log4js\/lib\/levels\.js/,saveLevelsRef),requireHook.onFileLoad(/\/log4js\/lib\/logger\.js/,instrumentLog4jsLogger)},exports.activate=function(){isActive=!0},exports.deactivate=function(){isActive=!1};