Skip to main content

Logging

Logging​

Basica internally uses Pino, the fastest javascript logger out there! Use loggerFactory to get back an instance and configure it as you please.

index.ts
import { loggerFactory } from "@basica/core/logger";

const logger = loggerFactory();

logger.info("Hello world!");
{"level":30,...,"msg":"Hello world!"}

Custom logger​

You can always bring in your own as long as it satisfies ILogger.

index.ts
import { ILogger } from "@basica/core/logger";

const logger: ILogger = {
info: console.info,
warn: console.warn,
error: console.error,
debug: console.debug,
trace: console.trace,
child: () => console,
};

logger.info("Hello world!");
Hello world!

Using logger​

service.ts
import { ILogger } from "@basica/core/logger";

export class MyService implements IStartup {

constructor(private readonly logger: ILogger) {
logger.info("Initializing!");
}

//...
}
index.ts
import { AppBuilder } from "@basica/core";

import { MyService } from "./service";

const app = AppBuilder.registerDependencies((di) =>
di
.addSingleton("my-svc", (c) => new MyService(c.logger)),
)

// ...
{"level":30,...,"msg":"Initializing!"}
note

Basica provides a default logger automatically. If you override it by registering your own under the logger key, it must satisfy ILogger.

// A default logger is provided automatically
const app1 = AppBuilder.registerDependencies().build(); // OK

// Overriding it with something that isn't an ILogger is an error
const app2 = AppBuilder.registerDependencies((di) =>
di.addSingleton("logger", () => "not a logger"),
).build(); // Error: logger is not of type ILogger

// Overriding it with a real logger is fine
const app3 = AppBuilder.registerDependencies((di) =>
di.addSingleton("logger", () => loggerFactory()),
).build(); // OK