Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-53765

Reduce log verbosity of backend errors

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • evergreen
    • None

      Problem statement

      When an error occurs in the backend, the context.error is fully spit into the logs, which results in very verbose logs.
      Verbose logs can be fine sometimes, but here I believe this goes too far and has reached a point where it will actually hide the other potential critical logs.

      Expected behavior

      Logging should provide context and help fix issues. But too much logging actually makes things harder to fix as developers have to basically scroll for hours to find critical lines.
      (and create pain in index finger while scrolling, too ).

      Examples

      Logging during a run through make run (I screwed the UUID on purpose to trigger such stack):

      backend_1   | error: { NotAuthenticated: Invalid UUID
      backend_1   |     at new NotAuthenticated (/srv/evergreen/node_modules/@feathersjs/errors/lib/index.js:93:17)
      backend_1   |     at Object.module.exports (/srv/evergreen/src/hooks/ensureuuid.js:48:11)
      backend_1   |     at promise.then.hookObject (/srv/evergreen/node_modules/@feathersjs/feathers/node_modules/@feathersjs/commons/lib/hooks.js:142:73)
      backend_1   |     at <anonymous>
      backend_1   |     at process._tickCallback (internal/process/next_tick.js:182:7)
      backend_1   |   type: 'FeathersError',
      backend_1   |   name: 'NotAuthenticated',
      backend_1   |   message: 'Invalid UUID',
      backend_1   |   code: 401,
      backend_1   |   className: 'not-authenticated',
      backend_1   |   data: undefined,
      backend_1   |   errors: {},
      backend_1   |   hook: 
      backend_1   |    { type: 'before',
      backend_1   |      arguments: [ null, [Object], [Object] ],
      backend_1   |      service: 
      backend_1   |       { paginate: false,
      backend_1   |         options: [Object],
      backend_1   |         Model: instances,
      backend_1   |         id: 'uuid',
      backend_1   |         events: [Array],
      backend_1   |         raw: false,
      backend_1   |         docs: [Object],
      backend_1   |         find: [Function: newMethod],
      backend_1   |         get: [Function: newMethod],
      backend_1   |         create: [Function: newMethod],
      backend_1   |         patch: [Function: newMethod],
      backend_1   |         update: [Function: newMethod],
      backend_1   |         remove: [Function: newMethod],
      backend_1   |         methods: [Object],
      backend_1   |         hooks: [Function: hooks],
      backend_1   |         _events: [Object],
      backend_1   |         _eventsCount: 5,
      backend_1   |         _maxListeners: undefined,
      backend_1   |         setMaxListeners: [Function: setMaxListeners],
      backend_1   |         getMaxListeners: [Function: getMaxListeners],
      backend_1   |         emit: [Function: emit],
      backend_1   |         addListener: [Function: addListener],
      backend_1   |         on: [Function: addListener],
      backend_1   |         prependListener: [Function: prependListener],
      backend_1   |         once: [Function: once],
      backend_1   |         prependOnceListener: [Function: prependOnceListener],
      backend_1   |         removeListener: [Function: removeListener],
      backend_1   |         removeAllListeners: [Function: removeAllListeners],
      backend_1   |         listeners: [Function: listeners],
      backend_1   |         rawListeners: [Function: rawListeners],
      backend_1   |         listenerCount: [Function: listenerCount],
      backend_1   |         eventNames: [Function: eventNames],
      backend_1   |         publish: [Function: publish],
      backend_1   |         _super: undefined,
      backend_1   |         [Symbol(@feathersjs/transport-commons/publishers)]: [Object] },
      backend_1   |      app: 
      backend_1   |       { [EventEmitter: app]
      backend_1   |         _events: [Object],
      backend_1   |         _eventsCount: 4,
      backend_1   |         _maxListeners: undefined,
      backend_1   |         setMaxListeners: [Function: setMaxListeners],
      backend_1   |         getMaxListeners: [Function: getMaxListeners],
      backend_1   |         emit: [Function: emit],
      backend_1   |         addListener: [Function: addListener],
      backend_1   |         on: [Function: addListener],
      backend_1   |         prependListener: [Function: prependListener],
      backend_1   |         once: [Function: once],
      backend_1   |         prependOnceListener: [Function: prependOnceListener],
      backend_1   |         removeListener: [Function: removeListener],
      backend_1   |         removeAllListeners: [Function: removeAllListeners],
      backend_1   |         listeners: [Function: listeners],
      backend_1   |         rawListeners: [Function: rawListeners],
      backend_1   |         listenerCount: [Function: listenerCount],
      backend_1   |         eventNames: [Function: eventNames],
      backend_1   |         init: [Function: init],
      backend_1   |         defaultConfiguration: [Function: defaultConfiguration],
      backend_1   |         lazyrouter: [Function: lazyrouter],
      backend_1   |         handle: [Function: handle],
      backend_1   |         use: [Function: newMethod],
      backend_1   |         route: [Function: route],
      instance_1  | error: Failed to update the Status record with the current level Invalid UUID
      backend_1   |         engine: [Function: engine],
      backend_1   |         param: [Function: param],
      backend_1   |         set: [Function: set],
      backend_1   |         path: [Function: path],
      backend_1   |         enabled: [Function: enabled],
      backend_1   |         disabled: [Function: disabled],
      backend_1   |         enable: [Function: enable],
      backend_1   |         disable: [Function: disable],
      backend_1   |         acl: [Function],
      backend_1   |         bind: [Function],
      backend_1   |         checkout: [Function],
      backend_1   |         connect: [Function],
      backend_1   |         copy: [Function],
      backend_1   |         delete: [Function],
      backend_1   |         get: [Function],
      backend_1   |         head: [Function],
      backend_1   |         link: [Function],
      backend_1   |         lock: [Function],
      backend_1   |         'm-search': [Function],
      backend_1   |         merge: [Function],
      backend_1   |         mkactivity: [Function],
      backend_1   |         mkcalendar: [Function],
      backend_1   |         mkcol: [Function],
      backend_1   |         move: [Function],
      backend_1   |         notify: [Function],
      backend_1   |         options: [Function],
      backend_1   |         patch: [Function],
      backend_1   |         post: [Function],
      backend_1   |         propfind: [Function],
      backend_1   |         proppatch: [Function],
      backend_1   |         purge: [Function],
      backend_1   |         put: [Function],
      backend_1   |         rebind: [Function],
      backend_1   |         report: [Function],
      backend_1   |         search: [Function],
      backend_1   |         source: [Function],
      backend_1   |         subscribe: [Function],
      backend_1   |         trace: [Function],
      backend_1   |         unbind: [Function],
      backend_1   |         unlink: [Function],
      backend_1   |         unlock: [Function],
      backend_1   |         unsubscribe: [Function],
      backend_1   |         all: [Function: all],
      backend_1   |         del: [Function],
      backend_1   |         render: [Function: render],
      backend_1   |         listen: [Function: newMethod],
      backend_1   |         request: [IncomingMessage],
      backend_1   |         response: [ServerResponse],
      backend_1   |         cache: {},
      backend_1   |         engines: {},
      backend_1   |         settings: [Object],
      backend_1   |         locals: [Object],
      backend_1   |         mountpath: '/',
      backend_1   |         configure: [Function: configure],
      backend_1   |         service: [Function: service],
      backend_1   |         setup: [Function],
      backend_1   |         version: '3.2.3',
      backend_1   |         methods: [Array],
      backend_1   |         mixins: [Array],
      backend_1   |         services: [Object],
      backend_1   |         providers: [Array],
      backend_1   |         _setup: false,
      backend_1   |         hookTypes: [Array],
      backend_1   |         hooks: [Function: hooks],
      backend_1   |         eventMappings: [Object],
      backend_1   |         _super: undefined,
      backend_1   |         _router: [Function],
      backend_1   |         rest: [Object],
      backend_1   |         channel: [Function: channel],
      backend_1   |         publish: [Function: publish],
      backend_1   |         lookup: [Function: lookup],
      backend_1   |         passport: [Authenticator],
      backend_1   |         authenticate: [Function: bound ],
      backend_1   |         docs: [Object],
      backend_1   |         io: [Server],
      backend_1   |         _isSetup: true,
      backend_1   |         [Symbol(@feathersjs/transport-commons/channels)]: [Object],
      backend_1   |         [Symbol(@feathersjs/transport-commons/publishers)]: [Object],
      backend_1   |         [Symbol(@feathersjs/transport-commons/router)]: [Object] },
      backend_1   |      method: 'patch',
      backend_1   |      path: 'status',
      backend_1   |      id: null,
      backend_1   |      data: { uuid: '4557b0c1-6f0e-401c-8580-9cdf9300dbfcg', updateId: 2 },
      backend_1   |      params: 
      backend_1   |       { query: [Object],
      backend_1   |         route: {},
      backend_1   |         connection: [Object],
      backend_1   |         provider: 'socketio',
      backend_1   |         payload: [Object],
      backend_1   |         user: [Object],
      backend_1   |         accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6ImFjY2VzcyJ9.eyJ1c2VySWQiOjEsImlhdCI6MTUzNzg4MDg3MiwiZXhwIjoxNTM3OTY3MjcyLCJhdWQiOiJodHRwczovL3lvdXJkb21haW4uY29tIiwiaXNzIjoiZmVhdGhlcnMiLCJzdWIiOiJhbm9ueW1vdXMiLCJqdGkiOiIyYzM1OTgwOC1jY2MwLTRlMDUtOWYzNi03NjA4MDQ4NjI0NGYifQ.h15cWycR67P6vM7979nj1GfATcQGQthKriaCURUPhmM',
      backend_1   |         headers: [Object],
      backend_1   |         authenticated: true } } }
      

      Typical logs during acceptance tests:

      BadRequest {
        type: 'FeathersError',
        name: 'BadRequest',
        message: 'Client must provide a curve with the request',
        code: 400,
        className: 'bad-request',
        data: undefined,
        errors: {},
        hook:
         { data: { pubKey: 'pretend-pubkey' },
           params:
            { query: {}, route: {}, provider: 'rest', headers: [Object] },
           type: 'before',
           service:
            { paginate: [Object],
              options: [Object],
              Model: registrations,
              id: 'id',
              events: undefined,
              raw: true,
              docs: [Object],
              find: [Function: newMethod],
              get: [Function: newMethod],
              create: [Function: newMethod],
              patch: [Function: newMethod],
              update: [Function: newMethod],
              remove: [Function: newMethod],
              hooks: [Function: hooks],
              _events: [Object],
              _eventsCount: 4,
              _maxListeners: undefined,
              setMaxListeners: [Function: setMaxListeners],
              getMaxListeners: [Function: getMaxListeners],
              emit: [Function],
              addListener: [Function: addListener],
              on: [Function: addListener],
              prependListener: [Function: prependListener],
              once: [Function: once],
              prependOnceListener: [Function: prependOnceListener],
              removeListener: [Function: removeListener],
              off: [Function: removeListener],
              removeAllListeners: [Function: removeAllListeners],
              listeners: [Function: listeners],
              rawListeners: [Function: rawListeners],
              listenerCount: [Function: listenerCount],
              eventNames: [Function: eventNames],
              publish: [Function: publish],
              _super: undefined,
              [Symbol(@feathersjs/transport-commons/publishers)]: {} },
           app:
            { [EventEmitter: app]
              _events: [Object],
              _eventsCount: 4,
              _maxListeners: undefined,
              setMaxListeners: [Function: setMaxListeners],
              getMaxListeners: [Function: getMaxListeners],
              emit: [Function],
              addListener: [Function: addListener],
              on: [Function: addListener],
              prependListener: [Function: prependListener],
              once: [Function: once],
              prependOnceListener: [Function: prependOnceListener],
              removeListener: [Function: removeListener],
              off: [Function: removeListener],
              removeAllListeners: [Function: removeAllListeners],
              listeners: [Function: listeners],
              rawListeners: [Function: rawListeners],
              listenerCount: [Function: listenerCount],
              eventNames: [Function: eventNames],
              init: [Function: init],
              defaultConfiguration: [Function: defaultConfiguration],
              lazyrouter: [Function: lazyrouter],
              handle: [Function: handle],
              use: [Function: newMethod],
              route: [Function: route],
              engine: [Function: engine],
              param: [Function: param],
              set: [Function: set],
              path: [Function: path],
              enabled: [Function: enabled],
              disabled: [Function: disabled],
              enable: [Function: enable],
              disable: [Function: disable],
              acl: [Function],
              bind: [Function],
              checkout: [Function],
              connect: [Function],
              copy: [Function],
              delete: [Function],
              get: [Function],
              head: [Function],
              link: [Function],
              lock: [Function],
              'm-search': [Function],
              merge: [Function],
              mkactivity: [Function],
              mkcalendar: [Function],
              mkcol: [Function],
              move: [Function],
              notify: [Function],
              options: [Function],
              patch: [Function],
              post: [Function],
              propfind: [Function],
              proppatch: [Function],
              purge: [Function],
              put: [Function],
              rebind: [Function],
              report: [Function],
              search: [Function],
              source: [Function],
              subscribe: [Function],
              trace: [Function],
              unbind: [Function],
              unlink: [Function],
              unlock: [Function],
              unsubscribe: [Function],
              all: [Function: all],
              del: [Function],
              render: [Function: render],
              listen: [Function: newMethod],
              request: [IncomingMessage],
              response: [ServerResponse],
              cache: {},
              engines: {},
              settings: [Object],
              locals: [Object],
              mountpath: '/',
              configure: [Function: configure],
              service: [Function: service],
              setup: [Function],
              version: '3.1.7',
              methods: [Array],
              mixins: [Array],
              services: [Object],
              providers: [Array],
              _setup: false,
              hookTypes: [Array],
              hooks: [Function: hooks],
              eventMappings: [Object],
              _super: undefined,
              _router: [Function],
              rest: [Object],
              channel: [Function: channel],
              publish: [Function: publish],
              lookup: [Function: lookup],
              passport: [Authenticator],
              authenticate: [Function: bound ],
              docs: [Object],
              io: [Server],
              _isSetup: true,
              [Symbol(@feathersjs/transport-commons/channels)]: [Object],
              [Symbol(@feathersjs/transport-commons/publishers)]: [Object],
              [Symbol(@feathersjs/transport-commons/router)]: [Object] },
           method: 'create',
           path: 'registration' } }
      

            batmat Baptiste Mathus
            batmat Baptiste Mathus
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: