Проблема с использованием SDK Azure Applications Insights с помощью средства регистрации NestJS - PullRequest
0 голосов
/ 30 октября 2019

В нашем приложении nestjs мы пытаемся использовать несколько регистраторов, один из которых использует Logger из nestjs, а другой - Azure Application Insight client.trackTrace. Когда вызываются оба регистратора, я вижу следующую ошибку 1: 0x10003c597 node::Abort() [/usr/local/bin/node] 2: 0x1000bc617 node::Chdir(v8::FunctionCallbackInfo<v8::Value> const&) [/usr/local/bin/node] 3: 0x10023663f v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo*) [/usr/local/bin/node] 4: 0x100235b81 v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) [/usr/local/bin/node] 5: 0x100235220 v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [/usr/local/bin/node] 6: 0x3196422dbe3d Abort trap: 6

Если используется только один регистратор, то нет проблем, оба работают нормально самостоятельно.

Если nestjs Logger заменяется на logger, который либо вызывает console.log, console.error ..etc или process.env.stdout.write (..), то он работает нормально. Так что, похоже, что-то происходит между nestjs Logger и клиентом AppicationInsights.

фабрика по созданию logger

import * as appInsights from 'applicationinsights';
import {Logger, LoggerService} from '@nestjs/common';



  appInsights
    .setup()
    .setAutoCollectConsole(true, true)
    .setAutoDependencyCorrelation(true)
    .start();



export const getLogger = (prefix: string): LoggerService => {


    const appInsightLogger: LoggerService = new AppInsightLogger(
      prefix,
      appInsights.defaultClient,



    return new MultiLogger(appInsightLogger, new Logger(prefix));


  }

MultiLogger

import { LoggerService } from '@nestjs/common';

export class MultiLogger implements LoggerService {
  constructor(private readonly logger1: LoggerService, private readonly logger2:LoggerService) {}

  error(message: any, trace?: string, context?: string) {

    this.logger1.error(message, trace, context);
   this.logger2.error(message, trace, context);
  }
  log(message: any, context?: string) {

    this.logger1.log(message, context);
    this.logger2.log(message, context)
  }


  warn(message: any, context?: string) {

    this.logger1.warn(message, context);
    this.logger2.warn(message, context)
  }

  debug?(message: any, context?: string) {

    this.logger1.debug(message, context);
    this.logger2.debug(message, context);
  }
  verbose?(message: any, context?: string) {

    this.logger1.verbose(message, context);
    this.logger2.verbose(message, context)
  }
}

...