Use transport, not logger

Signed-off-by: Bridget Barnes <bbarnes@seek.com.au>
This commit is contained in:
Bridget Barnes
2022-04-27 16:55:54 +10:00
parent 0fffa59941
commit d147f5ca15
2 changed files with 66 additions and 3 deletions
+62 -1
View File
@@ -2,4 +2,65 @@
'@backstage/plugin-techdocs-backend': patch
---
Output logs from TechDocs build to a logger in addition to existing frontend event stream
Output logs from a TechDocs build to a logging transport in addition to existing frontend event stream, for capturing these logs to other sources.
This allows users to capture debugging information around why tech docs fail to build without needing to rely on end users ending information from their web browser.
The most common use case is to log to the same place as the rest of the backend application logs.
To use, include
```
import { DockerContainerRunner } from '@backstage/backend-common';
import {
createRouter,
Generators,
Preparers,
Publisher,
} from '@backstage/plugin-techdocs-backend';
import Docker from 'dockerode';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Router> {
// Preparers are responsible for fetching source files for documentation.
const preparers = await Preparers.fromConfig(env.config, {
logger: env.logger,
reader: env.reader,
});
// Docker client (conditionally) used by the generators, based on techdocs.generators config.
const dockerClient = new Docker();
const containerRunner = new DockerContainerRunner({ dockerClient });
// Generators are used for generating documentation sites.
const generators = await Generators.fromConfig(env.config, {
logger: env.logger,
containerRunner,
});
// Publisher is used for
// 1. Publishing generated files to storage
// 2. Fetching files from storage and passing them to TechDocs frontend.
const publisher = await Publisher.fromConfig(env.config, {
logger: env.logger,
discovery: env.discovery,
});
// checks if the publisher is working and logs the result
await publisher.getReadiness();
return await createRouter({
preparers,
generators,
publisher,
logger: env.logger,
buildTransportLogger: env.logger,
config: env.config,
discovery: env.discovery,
cache: env.cache,
});
}
```
@@ -297,7 +297,9 @@ describe('DocsSynchronizer', () => {
techdocs: { legacyUseCaseSensitiveTripletPaths: true },
}),
logger: getVoidLogger(),
buildLogger: getVoidLogger(),
buildLogTransport: new winston.transports.Stream({
stream: new PassThrough(),
}),
scmIntegrations: ScmIntegrations.fromConfig(new ConfigReader({})),
cache,
});
@@ -331,7 +333,7 @@ describe('DocsSynchronizer', () => {
expect(mockResponseHandler.finish).toBeCalledWith({ updated: false });
});
it('should log to the build logger', async () => {
it("adds the build log transport to the logger's list of transports", async () => {
let logger: winston.Logger;
MockedDocsBuilder.prototype.build.mockImplementation(async () => {
logger = MockedDocsBuilder.mock.calls[0][0].logger;