refactor(core): Consolidate path-related errors in Sentry (no-changelog) (#7757)

Keep reporting [path-related
errors](https://n8nio.sentry.io/issues/4649493725) in Sentry but
consolidate them in a single error group.

Also, add `options.extra` as `meta` so they remain visible in debug
logs:

```
2023-11-24T11:50:54.852Z | error    | ReportableError: Something went wrong "{ test: 123, file: 'LoggerProxy.js', function: 'exports.error' }"
```

---------

Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
This commit is contained in:
Iván Ovejero
2023-11-24 14:42:46 +01:00
committed by GitHub
parent 5914e97e9a
commit eec2ec1ff8
9 changed files with 62 additions and 22 deletions

View File

@@ -1,11 +1,5 @@
import type { Primitives } from './utils';
import * as Logger from './LoggerProxy';
export interface ReportingOptions {
level?: 'warning' | 'error' | 'fatal';
tags?: Record<string, Primitives>;
extra?: Record<string, unknown>;
}
import { ReportableError, type ReportingOptions } from './errors/reportable.error';
interface ErrorReporter {
report: (error: Error | string, options?: ReportingOptions) => void;
@@ -16,7 +10,8 @@ const instance: ErrorReporter = {
if (error instanceof Error) {
let e = error;
do {
Logger.error(`${e.constructor.name}: ${e.message}`);
const meta = e instanceof ReportableError ? e.extra : undefined;
Logger.error(`${e.constructor.name}: ${e.message}`, meta);
e = e.cause as Error;
} while (e);
}

View File

@@ -0,0 +1 @@
export { ReportableError } from './reportable.error';

View File

@@ -0,0 +1,24 @@
import type { Event } from '@sentry/node';
type Level = 'warning' | 'error' | 'fatal';
export type ReportingOptions = {
level?: Level;
} & Pick<Event, 'tags' | 'extra'>;
export type ReportableErrorOptions = Partial<ErrorOptions> & ReportingOptions;
export class ReportableError extends Error {
readonly level: Level;
readonly tags?: Event['tags'];
readonly extra?: Event['extra'];
constructor(message: string, { level, tags, extra, ...rest }: ReportableErrorOptions) {
super(message, rest);
this.level = level ?? 'error';
this.tags = tags;
this.extra = extra;
}
}

View File

@@ -5,6 +5,7 @@ import * as NodeHelpers from './NodeHelpers';
import * as ObservableObject from './ObservableObject';
import * as TelemetryHelpers from './TelemetryHelpers';
export * from './errors';
export * from './Authentication';
export * from './Constants';
export * from './Cron';