77 lines
1.8 KiB
TypeScript
77 lines
1.8 KiB
TypeScript
import pino, { Logger as PinoLogger, LoggerOptions } from 'pino';
|
|
|
|
export type Logger = PinoLogger;
|
|
|
|
const getLogLevel = (): string => {
|
|
return process.env.LOG_LEVEL || (process.env.NODE_ENV === 'production' ? 'info' : 'debug');
|
|
};
|
|
|
|
const getPinoConfig = (): LoggerOptions => {
|
|
const isDevelopment = process.env.NODE_ENV !== 'production';
|
|
|
|
const baseConfig: LoggerOptions = {
|
|
level: getLogLevel(),
|
|
formatters: {
|
|
level: (label) => {
|
|
return { level: label.toUpperCase() };
|
|
},
|
|
},
|
|
timestamp: () => `,"timestamp":"${new Date(Date.now()).toISOString()}"`,
|
|
redact: {
|
|
paths: [
|
|
'password',
|
|
'token',
|
|
'secret',
|
|
'api_key',
|
|
'apiKey',
|
|
'authorization',
|
|
'cookie',
|
|
'access_token',
|
|
'refresh_token',
|
|
'*.password',
|
|
'*.token',
|
|
'*.secret',
|
|
'*.api_key',
|
|
'*.apiKey',
|
|
'*.authorization',
|
|
'*.cookie',
|
|
'*.access_token',
|
|
'*.refresh_token',
|
|
'headers.authorization',
|
|
'headers.cookie',
|
|
'headers.Authorization',
|
|
'headers.Cookie',
|
|
'credentials.password',
|
|
'credentials.secret',
|
|
'credentials.token',
|
|
],
|
|
censor: '[REDACTED]',
|
|
},
|
|
};
|
|
|
|
if (isDevelopment) {
|
|
return {
|
|
...baseConfig,
|
|
transport: {
|
|
target: 'pino-pretty',
|
|
options: {
|
|
colorize: true,
|
|
translateTime: 'SYS:standard',
|
|
ignore: 'pid,hostname',
|
|
singleLine: false,
|
|
messageFormat: '{msg}',
|
|
},
|
|
},
|
|
};
|
|
}
|
|
|
|
return baseConfig;
|
|
};
|
|
|
|
export const logger: Logger = pino(getPinoConfig());
|
|
|
|
export const createLogger = (name: string, context?: Record<string, any>): Logger => {
|
|
return logger.child({ name, ...context });
|
|
};
|
|
|
|
export default logger;
|