diff --git a/packages/backend-app-api/src/index.ts b/packages/backend-app-api/src/index.ts index d75f5c0941..33aca2b291 100644 --- a/packages/backend-app-api/src/index.ts +++ b/packages/backend-app-api/src/index.ts @@ -21,4 +21,3 @@ */ export { createBackend } from './wiring/types'; -export { loggerToWinstonLogger } from './services/implementations/loggerService'; diff --git a/packages/backend-app-api/src/services/implementations/configService.ts b/packages/backend-app-api/src/services/implementations/configService.ts index e9a81ae100..94a59baf34 100644 --- a/packages/backend-app-api/src/services/implementations/configService.ts +++ b/packages/backend-app-api/src/services/implementations/configService.ts @@ -18,9 +18,9 @@ import { loadBackendConfig } from '@backstage/backend-common'; import { configServiceRef, createServiceFactory, + loggerToWinstonLogger, loggerServiceRef, } from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from './loggerService'; export const configFactory = createServiceFactory({ service: configServiceRef, diff --git a/packages/backend-app-api/src/services/implementations/loggerService.ts b/packages/backend-app-api/src/services/implementations/loggerService.ts index ff6af4b643..fbeb4b9ade 100644 --- a/packages/backend-app-api/src/services/implementations/loggerService.ts +++ b/packages/backend-app-api/src/services/implementations/loggerService.ts @@ -23,38 +23,26 @@ import { import { Logger as WinstonLogger } from 'winston'; class BackstageLogger implements Logger { - constructor( - private readonly options: { - winston: WinstonLogger; - }, - ) {} + static fromWinston(logger: WinstonLogger): BackstageLogger { + return new BackstageLogger(logger); + } + + private constructor(private readonly winston: WinstonLogger) {} info(message: string, ...meta: any[]): void { - this.options.winston.info(message, ...meta); + this.winston.info(message, ...meta); } child(fields: { [name: string]: string }): Logger { - return new BackstageLogger({ - winston: this.options.winston.child(fields), - }); + return new BackstageLogger(this.winston.child(fields)); } - - toWinston() { - return this.options.winston; - } -} - -export function loggerToWinstonLogger(logger: Logger): WinstonLogger { - return (logger as BackstageLogger).toWinston(); } export const loggerFactory = createServiceFactory({ service: loggerServiceRef, deps: {}, factory: async () => { - const root = new BackstageLogger({ - winston: createRootLogger(), - }); + const root = BackstageLogger.fromWinston(createRootLogger()); return async (pluginId: string) => { return root.child({ pluginId }); }; diff --git a/packages/backend-app-api/src/services/implementations/tokenManagerService.ts b/packages/backend-app-api/src/services/implementations/tokenManagerService.ts index 7f0423e845..2e82fce9d9 100644 --- a/packages/backend-app-api/src/services/implementations/tokenManagerService.ts +++ b/packages/backend-app-api/src/services/implementations/tokenManagerService.ts @@ -19,9 +19,9 @@ import { loggerServiceRef, createServiceFactory, tokenManagerServiceRef, + loggerToWinstonLogger, } from '@backstage/backend-plugin-api'; import { ServerTokenManager } from '@backstage/backend-common'; -import { loggerToWinstonLogger } from './loggerService'; export const tokenManagerFactory = createServiceFactory({ service: tokenManagerServiceRef, diff --git a/packages/backend-app-api/src/services/implementations/urlReaderService.ts b/packages/backend-app-api/src/services/implementations/urlReaderService.ts index 7df6ca33a9..74431dfa0d 100644 --- a/packages/backend-app-api/src/services/implementations/urlReaderService.ts +++ b/packages/backend-app-api/src/services/implementations/urlReaderService.ts @@ -19,9 +19,9 @@ import { configServiceRef, createServiceFactory, loggerServiceRef, + loggerToWinstonLogger, urlReaderServiceRef, } from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from './loggerService'; export const urlReaderFactory = createServiceFactory({ service: urlReaderServiceRef, diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 24d2012374..dcf37826df 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -38,7 +38,9 @@ "@backstage/backend-common": "^0.14.1-next.2", "@backstage/plugin-permission-common": "^0.6.3-next.0", "@backstage/backend-tasks": "^0.3.3-next.2", - "express": "^4.17.1" + "express": "^4.17.1", + "winston": "^3.2.1", + "winston-transport": "^4.5.0" }, "devDependencies": { "@backstage/cli": "^0.18.0-next.2", diff --git a/packages/backend-plugin-api/src/index.ts b/packages/backend-plugin-api/src/index.ts index e82218ca69..452fa046f9 100644 --- a/packages/backend-plugin-api/src/index.ts +++ b/packages/backend-plugin-api/src/index.ts @@ -20,6 +20,5 @@ * @packageDocumentation */ +export * from './services'; export * from './wiring'; -export * from './services/system/types'; -export * from './services/definitions'; diff --git a/packages/backend-next/src/index.test.ts b/packages/backend-plugin-api/src/services/helpers/index.ts similarity index 69% rename from packages/backend-next/src/index.test.ts rename to packages/backend-plugin-api/src/services/helpers/index.ts index 8b41455b27..24336c1af2 100644 --- a/packages/backend-next/src/index.test.ts +++ b/packages/backend-plugin-api/src/services/helpers/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2022 The Backstage Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,4 @@ * limitations under the License. */ -import { PluginEnvironment } from './types'; - -describe('test', () => { - it('unbreaks the test runner', () => { - const unbreaker = {} as PluginEnvironment; - expect(unbreaker).toBeTruthy(); - }); -}); +export { loggerToWinstonLogger } from './loggerToWinstonLogger'; diff --git a/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts b/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts new file mode 100644 index 0000000000..65f97db745 --- /dev/null +++ b/packages/backend-plugin-api/src/services/helpers/loggerToWinstonLogger.ts @@ -0,0 +1,43 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Logger as BackstageLogger } from '../definitions'; +import { Logger as WinstonLogger, createLogger } from 'winston'; +import Transport, { TransportStreamOptions } from 'winston-transport'; + +class BackstageLoggerTransport extends Transport { + constructor( + private readonly backstageLogger: BackstageLogger, + opts?: TransportStreamOptions, + ) { + super(opts); + } + + log(info: { message: string }, callback: VoidFunction) { + // TODO: add support for levels and fields + this.backstageLogger.info(info.message); + callback(); + } +} + +export function loggerToWinstonLogger( + logger: BackstageLogger, + opts?: TransportStreamOptions, +): WinstonLogger { + return createLogger({ + transports: [new BackstageLoggerTransport(logger, opts)], + }); +} diff --git a/packages/backend-plugin-api/src/services/index.ts b/packages/backend-plugin-api/src/services/index.ts new file mode 100644 index 0000000000..96bd3d320a --- /dev/null +++ b/packages/backend-plugin-api/src/services/index.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './definitions'; +export * from './helpers'; +export * from './system'; diff --git a/packages/backend-plugin-api/src/services/system/index.ts b/packages/backend-plugin-api/src/services/system/index.ts new file mode 100644 index 0000000000..eead2297a5 --- /dev/null +++ b/packages/backend-plugin-api/src/services/system/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export type { + ServiceRef, + TypesToServiceRef, + DepsToDepFactories, + FactoryFunc, + ServiceFactory, + AnyServiceFactory, +} from './types'; +export { createServiceRef, createServiceFactory } from './types'; diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index c36e28deb8..6ebcae936b 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -34,7 +34,6 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-app-api": "^0.0.0", "@backstage/backend-plugin-api": "^0.0.0", "@backstage/plugin-catalog-node": "^0.0.0", "@backstage/backend-common": "^0.14.1-next.2", diff --git a/plugins/catalog-backend/src/service/CatalogPlugin.ts b/plugins/catalog-backend/src/service/CatalogPlugin.ts index fd3397612f..b82797ec8b 100644 --- a/plugins/catalog-backend/src/service/CatalogPlugin.ts +++ b/plugins/catalog-backend/src/service/CatalogPlugin.ts @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-app-api'; import { configServiceRef, createBackendPlugin, databaseServiceRef, loggerServiceRef, + loggerToWinstonLogger, permissionsServiceRef, urlReaderServiceRef, httpRouterServiceRef,