Skip to content

Commit

Permalink
feature(app): provide scoped logger in App
Browse files Browse the repository at this point in the history
moved out from FrameworkModule to default service container of `App
  • Loading branch information
marcj committed Oct 8, 2023
1 parent 57db424 commit e851fde
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 17 deletions.
14 changes: 9 additions & 5 deletions packages/app/src/service-container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { Injector, InjectorContext, InjectorModule, isProvided, ProviderWithScop
import { cli } from './command.js';
import { WorkflowDefinition } from '@deepkit/workflow';
import { deserialize, ReflectionClass, ReflectionFunction, validate } from '@deepkit/type';
import { ConsoleTransport, Logger } from '@deepkit/logger';
import { ConsoleTransport, Logger, ScopedLogger } from '@deepkit/logger';

export interface ControllerConfig {
controller?: ClassType,
Expand Down Expand Up @@ -87,15 +87,19 @@ export class ServiceContainer {
public process() {
if (this.injectorContext) return;

this.setupHook(this.appModule);
this.findModules(this.appModule);

this.appModule.addProvider({ provide: ServiceContainer, useValue: this });
this.appModule.addProvider({ provide: EventDispatcher, useValue: this.eventDispatcher });
this.appModule.addProvider({ provide: CliControllerRegistry, useValue: this.cliControllerRegistry });
this.appModule.addProvider({ provide: MiddlewareRegistry, useValue: this.middlewareRegistry });
this.appModule.addProvider({ provide: InjectorContext, useFactory: () => this.injectorContext! });
this.appModule.addProvider({ provide: Logger, useFactory: () => new Logger([new ConsoleTransport()]) });
this.appModule.addProvider(ConsoleTransport);
if (!this.appModule.isProvided(Logger)) {
this.appModule.addProvider({ provide: Logger, useFactory: (t: ConsoleTransport) => new Logger([t]) });
}
this.appModule.addProvider(ScopedLogger);

this.setupHook(this.appModule);
this.findModules(this.appModule);

this.processModule(this.appModule);

Expand Down
8 changes: 4 additions & 4 deletions packages/app/tests/application.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ test('service container hooks', () => {
const m = new MyModule;
const app = new ServiceContainer(new AppModule({ imports: [m] }));
app.process();
expect(m.providersFound.length).toBe(6); //6 is the default, as the ServiceContainer adds default services
expect(m.providersFound.length).toBe(8); //8 is the default, as the ServiceContainer adds default services
expect(m.controllersFound.length).toBe(0);
}

Expand All @@ -471,7 +471,7 @@ test('service container hooks', () => {
const m = new MyModule;
const app = new ServiceContainer(new AppModule({ controllers: [Controller], imports: [m] }));
app.process();
expect(m.providersFound.length).toBe(7);
expect(m.providersFound.length).toBe(9);
expect(m.controllersFound.length).toBe(1);
}

Expand All @@ -482,7 +482,7 @@ test('service container hooks', () => {
const m = new MyModule;
const app = new ServiceContainer(new AppModule({ providers: [Controller], imports: [m] }));
app.process();
expect(m.providersFound.length).toBe(7);
expect(m.providersFound.length).toBe(9);
expect(m.controllersFound.length).toBe(0);
}

Expand All @@ -501,7 +501,7 @@ test('service container hooks', () => {
const m = new MyModule;
const app = new ServiceContainer(new AppModule({ imports: [baseModule, m] }));
app.process();
expect(m.providersFound.length).toBe(8);
expect(m.providersFound.length).toBe(10);
expect(m.controllersFound.length).toBe(1);
}
});
Expand Down
37 changes: 37 additions & 0 deletions packages/app/tests/logger.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Logger, MemoryLoggerTransport, ScopedLogger } from '@deepkit/logger';
import { expect, test } from '@jest/globals';
import { App } from '../src/app.js';

test('logger', () => {
const memory = new MemoryLoggerTransport();

const app = new App({
providers: [{ provide: Logger, useValue: new Logger([memory]) }]
});

const logger = app.get<Logger>();
logger.log('hello world');

expect(memory.messageStrings).toEqual(['hello world']);
});

test('scoped logger', () => {
const memory = new MemoryLoggerTransport();

class Service {
constructor(public logger: ScopedLogger) {
}
}

const app = new App({
providers: [
Service,
{ provide: Logger, useValue: new Logger([memory]) },
]
});

const service = app.get<Service>();
service.logger.log('hello world');

expect(memory.messages[0].scope).toEqual(['Service']);
});
8 changes: 1 addition & 7 deletions packages/framework/src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import { registerDebugHttpController } from './debug/http-debug.controller.js';
import { HttpLogger, HttpModule, HttpRequest, serveStaticListener } from '@deepkit/http';
import { InjectorContext, injectorReference, ProviderWithScope, Token } from '@deepkit/injector';
import { FrameworkConfig } from './module.config.js';
import { ConsoleTransport, Logger, LoggerInterface } from '@deepkit/logger';
import { LoggerInterface } from '@deepkit/logger';
import { SessionHandler } from './session.js';
import { RpcServer, WebWorkerFactory } from './worker.js';
import { Stopwatch } from '@deepkit/stopwatch';
Expand All @@ -40,7 +40,6 @@ import { ApiConsoleModule } from '@deepkit/api-console-module';
import { AppModule, ControllerConfig, createModule } from '@deepkit/app';
import { RpcControllers, RpcInjectorContext, RpcKernelWithStopwatch } from './rpc.js';
import { normalizeDirectory } from './utils.js';
import { ScopedLogger } from "@deepkit/logger";

export class FrameworkModule extends createModule({
config: FrameworkConfig,
Expand All @@ -49,9 +48,6 @@ export class FrameworkModule extends createModule({
ApplicationServer,
WebWorkerFactory,
RpcServer,
ConsoleTransport,
Logger,
ScopedLogger,
MigrationProvider,
DebugController,
{ provide: DatabaseRegistry, useFactory: (ic: InjectorContext) => new DatabaseRegistry(ic) },
Expand Down Expand Up @@ -107,12 +103,10 @@ export class FrameworkModule extends createModule({
MigrationCreateController,
],
exports: [
ScopedLogger.provide,
ProcessLocker,
ApplicationServer,
WebWorkerFactory,
RpcServer,
ConsoleTransport,
RpcKernelSecurity,
RpcKernel,
MigrationProvider,
Expand Down
2 changes: 1 addition & 1 deletion packages/logger/src/logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ export class Logger implements LoggerInterface {
}
}

export type ScopedLogger = Inject<Logger, 'scoped-logger'>;
export type ScopedLogger = Inject<LoggerInterface, 'scoped-logger'>;
export const ScopedLogger = {
provide: 'scoped-logger',
transient: true,
Expand Down

0 comments on commit e851fde

Please sign in to comment.