From cb1c2781c053c293c40259e4305a533a343a7393 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 14 Dec 2022 17:20:20 +0100 Subject: [PATCH 1/5] backend-plugin-api: update logger interface with more methods and meta MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .changeset/chilly-bees-dream.md | 5 +++++ .changeset/wicked-paws-help.md | 5 +++++ .../implementations/rootLoggerService.ts | 21 +++++++++++++++---- .../src/services/definitions/index.ts | 2 +- .../services/definitions/loggerServiceRef.ts | 13 ++++++++++-- 5 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 .changeset/chilly-bees-dream.md create mode 100644 .changeset/wicked-paws-help.md diff --git a/.changeset/chilly-bees-dream.md b/.changeset/chilly-bees-dream.md new file mode 100644 index 0000000000..34e401a199 --- /dev/null +++ b/.changeset/chilly-bees-dream.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +Updated logger implementations to match interface changes. diff --git a/.changeset/wicked-paws-help.md b/.changeset/wicked-paws-help.md new file mode 100644 index 0000000000..8fbba71662 --- /dev/null +++ b/.changeset/wicked-paws-help.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-plugin-api': patch +--- + +Updated `LoggerService` interface with more log methods and meta. diff --git a/packages/backend-app-api/src/services/implementations/rootLoggerService.ts b/packages/backend-app-api/src/services/implementations/rootLoggerService.ts index 064091a122..54d40b6a12 100644 --- a/packages/backend-app-api/src/services/implementations/rootLoggerService.ts +++ b/packages/backend-app-api/src/services/implementations/rootLoggerService.ts @@ -20,6 +20,7 @@ import { LoggerService, coreServices, } from '@backstage/backend-plugin-api'; +import { LogMeta } from '@backstage/backend-plugin-api'; import { Logger as WinstonLogger } from 'winston'; class BackstageLogger implements LoggerService { @@ -29,12 +30,24 @@ class BackstageLogger implements LoggerService { private constructor(private readonly winston: WinstonLogger) {} - info(message: string, ...meta: any[]): void { - this.winston.info(message, ...meta); + error(message: string, meta?: LogMeta): void { + this.winston.error(message, meta); } - child(fields: { [name: string]: string }): LoggerService { - return new BackstageLogger(this.winston.child(fields)); + warn(message: string, meta?: LogMeta): void { + this.winston.warn(message, meta); + } + + info(message: string, meta?: LogMeta): void { + this.winston.info(message, meta); + } + + debug(message: string, meta?: LogMeta): void { + this.winston.debug(message, meta); + } + + child(meta: LogMeta): LoggerService { + return new BackstageLogger(this.winston.child(meta)); } } diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index e2f361ff01..3cf2ab4c77 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -26,7 +26,7 @@ export type { LifecycleService, LifecycleServiceShutdownHook, } from './lifecycleServiceRef'; -export type { LoggerService } from './loggerServiceRef'; +export type { LoggerService, LogMeta } from './loggerServiceRef'; export type { PermissionsService } from './permissionsServiceRef'; export type { PluginMetadataService } from './pluginMetadataServiceRef'; export type { RootLoggerService } from './rootLoggerServiceRef'; diff --git a/packages/backend-plugin-api/src/services/definitions/loggerServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/loggerServiceRef.ts index b135ccc8e6..179e97a84b 100644 --- a/packages/backend-plugin-api/src/services/definitions/loggerServiceRef.ts +++ b/packages/backend-plugin-api/src/services/definitions/loggerServiceRef.ts @@ -16,12 +16,21 @@ import { createServiceRef } from '../system/types'; +/** + * @public + */ +export type LogMeta = Error | { [name: string]: any }; + /** * @public */ export interface LoggerService { - info(message: string): void; - child(fields: { [name: string]: string }): LoggerService; + error(message: string, meta?: LogMeta): void; + warn(message: string, meta?: LogMeta): void; + info(message: string, meta?: LogMeta): void; + debug(message: string, meta?: LogMeta): void; + + child(meta: LogMeta): LoggerService; } /** From 1d068ea8a4152b9de4e42fc856962dd0fe00d827 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 14 Dec 2022 17:25:25 +0100 Subject: [PATCH 2/5] backend-plugin-api: update loggerToWinstonLogger to support log levels Signed-off-by: Patrik Oldsberg --- .../services/helpers/loggerToWinstonLogger.ts | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts b/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts index 418f669a75..1499b4e7ef 100644 --- a/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts +++ b/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts @@ -26,9 +26,24 @@ class BackstageLoggerTransport extends Transport { super(opts); } - log(info: { message: string }, callback: VoidFunction) { - // TODO: add support for levels and fields - this.backstageLogger.info(info.message); + log(info: any, callback: VoidFunction) { + const { level, message, ...meta } = info; + switch (level) { + case 'error': + this.backstageLogger.error(message, meta); + break; + case 'warn': + this.backstageLogger.warn(message, meta); + break; + case 'info': + this.backstageLogger.info(message, meta); + break; + case 'debug': + this.backstageLogger.debug(message, meta); + break; + default: + this.backstageLogger.info(message, meta); + } callback(); } } From 2ee44029f9d87afa2bfc22e94253264070128ca2 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 14 Dec 2022 17:31:14 +0100 Subject: [PATCH 3/5] backend-plugin-api: update API report Signed-off-by: Patrik Oldsberg --- packages/backend-plugin-api/api-report.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index d3c1292b7e..bbc0a39518 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -205,9 +205,15 @@ export type LifecycleServiceShutdownHook = { // @public (undocumented) export interface LoggerService { // (undocumented) - child(fields: { [name: string]: string }): LoggerService; + child(meta: LogMeta): LoggerService; // (undocumented) - info(message: string): void; + debug(message: string, meta?: LogMeta): void; + // (undocumented) + error(message: string, meta?: LogMeta): void; + // (undocumented) + info(message: string, meta?: LogMeta): void; + // (undocumented) + warn(message: string, meta?: LogMeta): void; } // @public (undocumented) @@ -219,6 +225,13 @@ export function loggerToWinstonLogger( opts?: TransportStreamOptions, ): Logger; +// @public (undocumented) +export type LogMeta = + | Error + | { + [name: string]: any; + }; + // @public (undocumented) export type PermissionsService = PermissionEvaluator | PermissionAuthorizer; From 7cd01231b50d4019c0cf36cf308f6b09168dbdb1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 15 Dec 2022 13:47:41 +0100 Subject: [PATCH 4/5] backend-plugin-api: separate out Error from LogMeta + limit to indexed objects Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- packages/backend-plugin-api/api-report.md | 16 +++++++--------- .../src/services/definitions/loggerServiceRef.ts | 10 +++++----- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index bbc0a39518..545728b386 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -207,13 +207,13 @@ export interface LoggerService { // (undocumented) child(meta: LogMeta): LoggerService; // (undocumented) - debug(message: string, meta?: LogMeta): void; + debug(message: string, meta?: Error | LogMeta): void; // (undocumented) - error(message: string, meta?: LogMeta): void; + error(message: string, meta?: Error | LogMeta): void; // (undocumented) - info(message: string, meta?: LogMeta): void; + info(message: string, meta?: Error | LogMeta): void; // (undocumented) - warn(message: string, meta?: LogMeta): void; + warn(message: string, meta?: Error | LogMeta): void; } // @public (undocumented) @@ -226,11 +226,9 @@ export function loggerToWinstonLogger( ): Logger; // @public (undocumented) -export type LogMeta = - | Error - | { - [name: string]: any; - }; +export type LogMeta = { + [name: string]: unknown; +}; // @public (undocumented) export type PermissionsService = PermissionEvaluator | PermissionAuthorizer; diff --git a/packages/backend-plugin-api/src/services/definitions/loggerServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/loggerServiceRef.ts index 179e97a84b..1c094549c1 100644 --- a/packages/backend-plugin-api/src/services/definitions/loggerServiceRef.ts +++ b/packages/backend-plugin-api/src/services/definitions/loggerServiceRef.ts @@ -19,16 +19,16 @@ import { createServiceRef } from '../system/types'; /** * @public */ -export type LogMeta = Error | { [name: string]: any }; +export type LogMeta = { [name: string]: unknown }; /** * @public */ export interface LoggerService { - error(message: string, meta?: LogMeta): void; - warn(message: string, meta?: LogMeta): void; - info(message: string, meta?: LogMeta): void; - debug(message: string, meta?: LogMeta): void; + error(message: string, meta?: Error | LogMeta): void; + warn(message: string, meta?: Error | LogMeta): void; + info(message: string, meta?: Error | LogMeta): void; + debug(message: string, meta?: Error | LogMeta): void; child(meta: LogMeta): LoggerService; } From 9518e5e5e6f2eeb2e0b3730a468b09b65a570307 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 15 Dec 2022 13:55:11 +0100 Subject: [PATCH 5/5] backend-plugin-api: more runtime safety in loggerToWinstonLogger Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .../services/helpers/loggerToWinstonLogger.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts b/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts index 1499b4e7ef..6f435a250a 100644 --- a/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts +++ b/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts @@ -26,23 +26,27 @@ class BackstageLoggerTransport extends Transport { super(opts); } - log(info: any, callback: VoidFunction) { - const { level, message, ...meta } = info; + log(info: unknown, callback: VoidFunction) { + if (typeof info !== 'object' || info === null) { + callback(); + return; + } + const { level, message, ...meta } = info as { [name: string]: unknown }; switch (level) { case 'error': - this.backstageLogger.error(message, meta); + this.backstageLogger.error(String(message), meta); break; case 'warn': - this.backstageLogger.warn(message, meta); + this.backstageLogger.warn(String(message), meta); break; case 'info': - this.backstageLogger.info(message, meta); + this.backstageLogger.info(String(message), meta); break; case 'debug': - this.backstageLogger.debug(message, meta); + this.backstageLogger.debug(String(message), meta); break; default: - this.backstageLogger.info(message, meta); + this.backstageLogger.info(String(message), meta); } callback(); }