|
@@ -14,13 +14,15 @@ const isBrowser =
|
|
|
|
|
|
|
|
let moduleConfig: LoggerConfig = { default: 'info' };
|
|
let moduleConfig: LoggerConfig = { default: 'info' };
|
|
|
let envOverrides: Omit<LoggerConfig, 'default'> = {};
|
|
let envOverrides: Omit<LoggerConfig, 'default'> = {};
|
|
|
-const loggerCache = new Map<string, Logger>();
|
|
|
|
|
|
|
+const loggerCache = new Map<string, Logger<string>>();
|
|
|
|
|
|
|
|
// Shared root logger. pino.transport() is called once here so that all
|
|
// Shared root logger. pino.transport() is called once here so that all
|
|
|
// namespace loggers share a single Worker thread (pino's performance model).
|
|
// namespace loggers share a single Worker thread (pino's performance model).
|
|
|
-let rootLogger: Logger | null = null;
|
|
|
|
|
|
|
+let rootLogger: Logger<string> | null = null;
|
|
|
|
|
|
|
|
-function assertRootLogger(logger: Logger | null): asserts logger is Logger {
|
|
|
|
|
|
|
+function assertRootLogger(
|
|
|
|
|
+ logger: Logger<string> | null,
|
|
|
|
|
+): asserts logger is Logger<string> {
|
|
|
if (logger == null) {
|
|
if (logger == null) {
|
|
|
throw new Error(
|
|
throw new Error(
|
|
|
'rootLogger is not initialized. Call initializeLoggerFactory() first.',
|
|
'rootLogger is not initialized. Call initializeLoggerFactory() first.',
|
|
@@ -46,16 +48,17 @@ export function initializeLoggerFactory(options: LoggerFactoryOptions): void {
|
|
|
// Browser: no Worker thread involved; use pino's built-in browser mode.
|
|
// Browser: no Worker thread involved; use pino's built-in browser mode.
|
|
|
// Root level is 'trace' so each child can apply its own resolved level.
|
|
// Root level is 'trace' so each child can apply its own resolved level.
|
|
|
const { browser } = createBrowserOptions(isProduction);
|
|
const { browser } = createBrowserOptions(isProduction);
|
|
|
- rootLogger = pino({ level: 'trace', browser });
|
|
|
|
|
|
|
+ rootLogger = pino({ level: 'trace', browser }) as Logger<string>;
|
|
|
} else {
|
|
} else {
|
|
|
// Node.js: call pino.transport() ONCE here.
|
|
// Node.js: call pino.transport() ONCE here.
|
|
|
// Every subsequent loggerFactory() call uses rootLogger.child() which
|
|
// Every subsequent loggerFactory() call uses rootLogger.child() which
|
|
|
// shares this single Worker thread rather than spawning a new one.
|
|
// shares this single Worker thread rather than spawning a new one.
|
|
|
const { transport } = createNodeTransportOptions(isProduction);
|
|
const { transport } = createNodeTransportOptions(isProduction);
|
|
|
- rootLogger =
|
|
|
|
|
|
|
+ rootLogger = (
|
|
|
transport != null
|
|
transport != null
|
|
|
? pino({ level: 'trace' }, pino.transport(transport))
|
|
? pino({ level: 'trace' }, pino.transport(transport))
|
|
|
- : pino({ level: 'trace' });
|
|
|
|
|
|
|
+ : pino({ level: 'trace' })
|
|
|
|
|
+ ) as Logger<string>;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -63,7 +66,7 @@ export function initializeLoggerFactory(options: LoggerFactoryOptions): void {
|
|
|
* Create or retrieve a cached pino logger for the given namespace.
|
|
* Create or retrieve a cached pino logger for the given namespace.
|
|
|
* Returns a child of the shared root logger so the Worker thread is reused.
|
|
* Returns a child of the shared root logger so the Worker thread is reused.
|
|
|
*/
|
|
*/
|
|
|
-export function loggerFactory(name: string): Logger {
|
|
|
|
|
|
|
+export function loggerFactory(name: string): Logger<string> {
|
|
|
const cached = loggerCache.get(name);
|
|
const cached = loggerCache.get(name);
|
|
|
if (cached != null) {
|
|
if (cached != null) {
|
|
|
return cached;
|
|
return cached;
|