Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const shimmer=require("shimmer"),requireHook=require("../../../util/requireHook"),tracingUtil=require("../../tracingUtil"),constants=require("../../constants"),cls=require("../../cls");let isActive=!1;function instrument(Logger){shimmer.wrap(Logger.prototype,"warn",shimLog(!1)),shimmer.wrap(Logger.prototype,"error",shimLog(!0)),shimmer.wrap(Logger.prototype,"fatal",shimLog(!0))}function shimLog(markAsError){return originalLog=>function(){if(0===arguments.length||this.fields&&this.fields.__in)return originalLog.apply(this,arguments);if(cls.skipExitTracing({isActive:isActive,log:!1}))return originalLog.apply(this,arguments);var originalArgs=new Array(arguments.length);for(let i=0;i<arguments.length;i++)originalArgs[i]=arguments[i];instrumentedLog(this,originalLog,originalArgs,markAsError)}}function instrumentedLog(ctx,originalLog,originalArgs,markAsError){return cls.ns.runAndReturn(()=>{var span=cls.startSpan("log.bunyan",constants.EXIT);span.stack=tracingUtil.getStackTrace(instrumentedLog);const fields=originalArgs[0];let message=originalArgs[1];if("string"==typeof fields)message=fields;else if(fields&&"string"==typeof fields.message&&"string"==typeof message)message=fields.message+" -- "+message;else if(fields&&"string"==typeof fields.message)message=fields.message;else if(fields&&fields.err&&"object"==typeof fields.err&&"string"==typeof fields.err.message&&"string"==typeof message)message=fields.err.message+" -- "+message;else if(fields&&fields.err&&"object"==typeof fields.err&&"string"==typeof fields.err.message)message=fields.err.message;else if("object"==typeof fields){const obj={};Object.keys(fields).every((key,index)=>{return!(100<index||(index=fields[key],obj[key]="object"==typeof index?"[Object]":index,0))}),message=message&&"string"==typeof message?JSON.stringify(obj)+" - "+message:JSON.stringify(obj)}else message='Log call without message. The Bunyan "fields" argument cannot be serialized by Instana because of unknown format.';500<message.length&&(message=message.substring(0,497)+"..."),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.onModuleLoad("bunyan",instrument)},exports.activate=function(){isActive=!0},exports.deactivate=function(){isActive=!1};