/* The log level is controlled by the `LOG_LEVEL` environment variable, where lower log levels = more verbose examples: if log level is 'info', only 'info', 'warn', and 'error' logs will be output if log level is 'debug', all logs will be output if log level is 'error', only 'error' logs will be output */ export const LOG_LEVELS = { error: 0, warn: 1, info: 2, debug: 3, } as const type LogLevel = keyof typeof LOG_LEVELS type LogLevelValue = (typeof LOG_LEVELS)[LogLevel] function isValidLogLevel(level: string): level is LogLevel { return level in LOG_LEVELS } // We set the log level based on the LOG_LEVEL environment variable // but default to: // - 'info' in development // - 'debug' in production // - 'debug' in test - this is because `vitest` turns off logs unless --silent=false is passed export function getLogLevelNumber(): LogLevelValue { let defaultLogLevel: LogLevel = 'info' if ( !process.env.LOG_LEVEL && (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test') ) { defaultLogLevel = 'debug' } const envLogLevel = process.env.LOG_LEVEL?.toLowerCase() || defaultLogLevel const logLevel = isValidLogLevel(envLogLevel) ? envLogLevel : defaultLogLevel return LOG_LEVELS[logLevel] } export const useProductionLogging = (): boolean => { return ( (process.env.NODE_ENV === 'production' && !process.env.CI) || process.env.LOG_LIKE_PRODUCTION === 'true' ) }