-
Notifications
You must be signed in to change notification settings - Fork 6
Setup Logger
Dhruv Saxena edited this page Jul 15, 2021
·
5 revisions
Setup logger for the project.
file-path: src/helpers/logger/index.ts
Yes, Pino is pre-installed and pre-configured.
Install winston logger
yarn add winston
Setup logger file
import winston, { format, LoggerOptions } from 'winston';
const { combine, timestamp, printf } = format;
import { env } from '../env-helper';
import { getResponseTime } from './utils';
// Types
import { Request, Response, NextFunction } from 'express';
const formatter = printf(({ level, message, timestamp }) => {
return `[${timestamp}] ${level.toUpperCase()}: ${message}`;
});
const config: LoggerOptions = {
level: 'debug',
format: combine(timestamp(), formatter),
transports: [
env.string('NODE_ENV') !== 'production'
? new winston.transports.Console()
: new winston.transports.File({ filename: 'debug.log' }),
],
};
const logger = winston.createLogger(config);
const apiLogger = (req: Request, res: Response, next: NextFunction): void => {
(async () => {
const delta = getResponseTime(process.hrtime()).toLocaleString();
const message = `${req.method} ${req.url} (${delta} ms)`;
logger.debug(message);
next();
})();
};
//! Do-not rename logger and apiLogger functions
export { logger, apiLogger };
Pino is pre-installed with the project, here's the default setup for it.
yarn add pino pino-pretty
yarn add -D @types/pino
Default configurations
import pino from 'pino';
import { env } from '../env-helper';
import { getResponseTime } from './utils'
import { Request, Response, NextFunction } from 'express';
const config: pino.LoggerOptions = {
level: env.string('LOG_LEVEL', 'debug'),
timestamp: () => `,"time":"${new Date(Date.now()).toISOString()}"`,
};
let logger: pino.BaseLogger;
if (env.string('NODE_ENV') !== 'production') {
logger = pino({
...config,
prettyPrint: {
colorize: true,
translateTime: 'yyyy-mm-dd HH:MM:ss',
},
});
} else {
logger = pino(
config,
pino.destination({
dest: 'debug.log',
sync: false,
}),
);
}
const apiLogger = (req: Request, res: Response, next: NextFunction): void => {
(async () => {
const delta = getResponseTime(process.hrtime()).toLocaleString();
const message = `${req.method} ${req.url} (${delta} ms)`;
logger.debug(message);
next();
})();
};
//! Do-not rename logger and apiLogger
export { logger, apiLogger };