#
Implement a custom logger
Many applications must integrate with specific remote logging solutions. To facilitate this integration, the shell runtime accepts any custom loggers implementing the Logger interface.
#
Create a custom logger class
First, let's define a custom logger:
host/src/customerLogger.ts
import { Logger, type LogLevel, type Runtime } from "@squide/firefly";
export class CustomLogger implements Logger {
readonly #logLovel: LogLevel
constructor(runtime: Runtime, logLevel: LogLevel = LogLevel.debug) {
super(CustomLogger.name, logLevel);
this.#logLevel = logLevel;
}
debug(log: string, ...rest: unknown[]): Promise<unknown> {
if (this.#logLevel <= LogLevel.debug) {
console.log(`[custom-logger] ${log}`, ...rest);
}
return Promise.resolve();
}
information(log: string, ...rest: unknown[]): Promise<unknown> {
if (this.#logLevel <= LogLevel.information) {
console.info(`[custom-logger] ${log}`, ...rest);
}
return Promise.resolve();
}
warning(log: string, ...rest: unknown[]): Promise<unknown> {
if (this.#logLevel <= LogLevel.warning) {
console.warn(`[custom-logger] ${log}`, ...rest);
}
return Promise.resolve();
}
error(log: string, ...rest: unknown[]): Promise<unknown> {
if (this.#logLevel <= LogLevel.error) {
console.error(`[custom-logger] ${log}`, ...rest);
}
return Promise.resolve();
}
critical(log: string, ...rest: unknown[]): Promise<unknown> {
if (this.#logLevel <= LogLevel.critical) {
console.error(`[custom-logger] ${log}`, ...rest);
}
return Promise.resolve();
}
}
Then create a FireflyRuntime instance configured with an instance of the new CustomLogger
:
host/src/index.tsx
import { FireflyRuntime } from "@squide/firefly";
import { CustomLogger } from "./customLogger.ts";
const runtime = new FireflyRuntime({
loggers: [x => new CustomLogger(x)],
});
#
Try it 🚀
Start the applications and open the developer tools, then, refresh the page. You should see the following console log message:
> [custom-logger] [squide] Found 1 local module to register.