diff --git a/config/presets/setup.json b/config/presets/setup.json index 4b95f96e8..e8372d060 100644 --- a/config/presets/setup.json +++ b/config/presets/setup.json @@ -7,9 +7,6 @@ "Setup:_serverFactory": { "@id": "urn:solid-server:default:ServerFactory" }, - "Setup:_loggerFactory": { - "@id": "urn:solid-server:default:LoggerFactory" - }, "Setup:_initializer": { "@id": "urn:solid-server:default:Initializer" }, @@ -24,6 +21,12 @@ "@id": "urn:solid-server:default:Initializer", "@type": "AllVoidCompositeHandler", "AllVoidCompositeHandler:_handlers": [ + { + "@type": "LoggerInitializer", + "LoggerInitializer:_loggerFactory": { + "@id": "urn:solid-server:default:LoggerFactory" + } + }, { "@type": "AclInitializer", "AclInitializer:_baseUrl": { diff --git a/src/index.ts b/src/index.ts index f8c761026..137bf337c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,6 +16,7 @@ export * from './authorization/WebAclAuthorizer'; export * from './init/AclInitializer'; export * from './init/CliRunner'; export * from './init/Initializer'; +export * from './init/LoggerInitializer'; export * from './init/Setup'; // LDP/HTTP/Metadata diff --git a/src/init/LoggerInitializer.ts b/src/init/LoggerInitializer.ts new file mode 100644 index 000000000..6dcdaf3a4 --- /dev/null +++ b/src/init/LoggerInitializer.ts @@ -0,0 +1,19 @@ +import type { LoggerFactory } from '../logging/LoggerFactory'; +import { setGlobalLoggerFactory } from '../logging/LogUtil'; +import { Initializer } from './Initializer'; + +/** + * Sets up the global logger factory. + */ +export class LoggerInitializer extends Initializer { + private readonly loggerFactory: LoggerFactory; + + public constructor(loggerFactory: LoggerFactory) { + super(); + this.loggerFactory = loggerFactory; + } + + public async handle(): Promise { + setGlobalLoggerFactory(this.loggerFactory); + } +} diff --git a/src/init/Setup.ts b/src/init/Setup.ts index b35a8d967..7e49ce33e 100644 --- a/src/init/Setup.ts +++ b/src/init/Setup.ts @@ -1,5 +1,3 @@ -import type { LoggerFactory } from '../logging/LoggerFactory'; -import { getLoggerFor, setGlobalLoggerFactory } from '../logging/LogUtil'; import type { HttpServerFactory } from '../server/HttpServerFactory'; import type { Initializer } from './Initializer'; @@ -7,23 +5,19 @@ import type { Initializer } from './Initializer'; * Invokes all logic to setup a server. */ export class Setup { - protected readonly logger = getLoggerFor(this); private readonly serverFactory: HttpServerFactory; - private readonly loggerFactory: LoggerFactory; private readonly initializer: Initializer; private readonly base: string; private readonly port: number; public constructor( - serverFactory: HttpServerFactory, - loggerFactory: LoggerFactory, initializer: Initializer, + serverFactory: HttpServerFactory, base: string, port: number, ) { - this.serverFactory = serverFactory; - this.loggerFactory = loggerFactory; this.initializer = initializer; + this.serverFactory = serverFactory; this.base = base; this.port = port; } @@ -32,10 +26,7 @@ export class Setup { * Set up a server. */ public async setup(): Promise { - setGlobalLoggerFactory(this.loggerFactory); - await this.initializer.handleSafe(); - this.serverFactory.startServer(this.port); return this.base; } diff --git a/test/unit/init/LoggerInitializer.test.ts b/test/unit/init/LoggerInitializer.test.ts new file mode 100644 index 000000000..ef4d37823 --- /dev/null +++ b/test/unit/init/LoggerInitializer.test.ts @@ -0,0 +1,20 @@ +import { LoggerInitializer } from '../../../src/init/LoggerInitializer'; +import type { LoggerFactory } from '../../../src/logging/LoggerFactory'; +import { setGlobalLoggerFactory } from '../../../src/logging/LogUtil'; + +jest.mock('../../../src/logging/LogUtil'); + +describe('LoggerInitializer', (): void => { + const loggerFactory = {} as LoggerFactory; + + let initializer: LoggerInitializer; + beforeAll(async(): Promise => { + initializer = new LoggerInitializer(loggerFactory); + }); + + it('sets the global logger factory.', async(): Promise => { + await initializer.handle(); + expect(setGlobalLoggerFactory).toHaveBeenCalledTimes(1); + expect(setGlobalLoggerFactory).toHaveBeenCalledWith(loggerFactory); + }); +}); diff --git a/test/unit/init/Setup.test.ts b/test/unit/init/Setup.test.ts index 2074ee27f..cab4f7835 100644 --- a/test/unit/init/Setup.test.ts +++ b/test/unit/init/Setup.test.ts @@ -1,6 +1,5 @@ import type { Initializer } from '../../../src/init/Initializer'; import { Setup } from '../../../src/init/Setup'; -import { VoidLoggerFactory } from '../../../src/logging/VoidLoggerFactory'; import type { HttpServerFactory } from '../../../src/server/HttpServerFactory'; describe('Setup', (): void => { @@ -12,7 +11,7 @@ describe('Setup', (): void => { } as any; beforeAll(async(): Promise => { - const setup = new Setup(serverFactory, new VoidLoggerFactory(), initializer, 'http://localhost:3000/', 3000); + const setup = new Setup(initializer, serverFactory, 'http://localhost:3000/', 3000); await setup.setup(); });