function performInstrumentation({ obj, args, opts, agent, winston, shim, registerLogger }) {
  const config = agent.config

  createModuleUsageMetric('winston', agent.metrics)

  if (isLocalDecoratingEnabled(config) || isMetricsEnabled(config)) {
    registerFormatter({ opts, agent, winston })
  }

  const winstonLogger = registerLogger.apply(obj, args)

  if (isLogForwardingEnabled(config, agent)) {
    winstonLogger.add(new NrTransport({ agent }))
    wrapConfigure({ shim, winstonLogger, agent })
  }

  return winstonLogger
}
Does the necessary instrumentation depending on application_logging configuration.
It will register a formatter to track metrics or decorate message in formatter(if local log decoration)
and register a transport do to the log fowarding

@param {object} params object passed to function
@param {object} params.obj instance of winston logger
@param {Array} params.args arguments passed to the logger creation method(createLogger or logger.add)
@param {object} params.opts the logger options argument
@param {Agent} params.agent NR instance
@param {object} params.winston the winston export
@param {Shim} params.shim shim instance
@param {Function} params.registerLogger the function to create winston logger
@returns {object} the winston logger instance with relevant instrumentation