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/api-report.md b/packages/backend-plugin-api/api-report.md index d3c1292b7e..545728b386 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?: Error | LogMeta): void; + // (undocumented) + error(message: string, meta?: Error | LogMeta): void; + // (undocumented) + info(message: string, meta?: Error | LogMeta): void; + // (undocumented) + warn(message: string, meta?: Error | LogMeta): void; } // @public (undocumented) @@ -219,6 +225,11 @@ export function loggerToWinstonLogger( opts?: TransportStreamOptions, ): Logger; +// @public (undocumented) +export type LogMeta = { + [name: string]: unknown; +}; + // @public (undocumented) export type PermissionsService = PermissionEvaluator | PermissionAuthorizer; 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..1c094549c1 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 = { [name: string]: unknown }; + /** * @public */ export interface LoggerService { - info(message: string): void; - child(fields: { [name: string]: string }): LoggerService; + 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; } /** diff --git a/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts b/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts index 418f669a75..6f435a250a 100644 --- a/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts +++ b/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts @@ -26,9 +26,28 @@ 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: 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(String(message), meta); + break; + case 'warn': + this.backstageLogger.warn(String(message), meta); + break; + case 'info': + this.backstageLogger.info(String(message), meta); + break; + case 'debug': + this.backstageLogger.debug(String(message), meta); + break; + default: + this.backstageLogger.info(String(message), meta); + } callback(); } }