B2B-88: add starter kit structure and elements
This commit is contained in:
9
packages/shared/src/logger/impl/console.ts
Normal file
9
packages/shared/src/logger/impl/console.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
const Logger = {
|
||||
info: console.info,
|
||||
error: console.error,
|
||||
warn: console.warn,
|
||||
debug: console.debug,
|
||||
fatal: console.error,
|
||||
}
|
||||
|
||||
export { Logger };
|
||||
18
packages/shared/src/logger/impl/pino.ts
Normal file
18
packages/shared/src/logger/impl/pino.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { pino } from 'pino';
|
||||
|
||||
/**
|
||||
* @name Logger
|
||||
* @description A logger implementation using Pino
|
||||
*/
|
||||
const Logger = pino({
|
||||
browser: {
|
||||
asObject: true,
|
||||
},
|
||||
level: 'debug',
|
||||
base: {
|
||||
env: process.env.NODE_ENV,
|
||||
},
|
||||
errorKey: 'error',
|
||||
});
|
||||
|
||||
export { Logger };
|
||||
33
packages/shared/src/logger/index.ts
Normal file
33
packages/shared/src/logger/index.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { createRegistry } from '../registry';
|
||||
import { Logger as LoggerInstance } from './logger';
|
||||
|
||||
// Define the type for the logger provider. Currently supporting 'pino'.
|
||||
type LoggerProvider = 'pino' | 'console';
|
||||
|
||||
// Use pino as the default logger provider
|
||||
const LOGGER = (process.env.LOGGER ?? 'pino') as LoggerProvider;
|
||||
|
||||
// Create a registry for logger implementations
|
||||
const loggerRegistry = createRegistry<LoggerInstance, LoggerProvider>();
|
||||
|
||||
// Register the 'pino' logger implementation
|
||||
loggerRegistry.register('pino', async () => {
|
||||
const { Logger: PinoLogger } = await import('./impl/pino');
|
||||
|
||||
return PinoLogger;
|
||||
});
|
||||
|
||||
// Register the 'console' logger implementation
|
||||
loggerRegistry.register('console', async () => {
|
||||
const { Logger: ConsoleLogger } = await import('./impl/console');
|
||||
|
||||
return ConsoleLogger;
|
||||
});
|
||||
|
||||
/**
|
||||
* @name getLogger
|
||||
* @description Retrieves the logger implementation based on the LOGGER environment variable using the registry API.
|
||||
*/
|
||||
export async function getLogger() {
|
||||
return loggerRegistry.get(LOGGER);
|
||||
}
|
||||
17
packages/shared/src/logger/logger.ts
Normal file
17
packages/shared/src/logger/logger.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
type LogFn = {
|
||||
<T extends object>(obj: T, msg?: string, ...args: unknown[]): void;
|
||||
(obj: unknown, msg?: string, ...args: unknown[]): void;
|
||||
(msg: string, ...args: unknown[]): void;
|
||||
};
|
||||
|
||||
/**
|
||||
* @name Logger
|
||||
* @description Logger interface for logging messages
|
||||
*/
|
||||
export interface Logger {
|
||||
info: LogFn;
|
||||
error: LogFn;
|
||||
warn: LogFn;
|
||||
debug: LogFn;
|
||||
fatal: LogFn;
|
||||
}
|
||||
Reference in New Issue
Block a user