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
- Classes
- Object Factory
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)),
)
// ...
service.ts
import { ILogger } from "@basica/core/logger";
export const createMyService = (logger: ILogger) => {
logger.info("Initializing!");
return {
//...
}
};
index.ts
import { AppBuilder } from "@basica/core";
import { createMyService } from "./service";
const app = AppBuilder.registerDependencies((di) =>
di
.addSingleton("my-svc", (c) => createMyService(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