56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
|
import { createLogger, format, transports } from 'winston';
|
||
|
// @ts-ignore
|
||
|
import * as paths from '../config/paths';
|
||
|
const { combine, timestamp, prettyPrint, printf, colorize } = format;
|
||
|
|
||
|
const custom = combine(
|
||
|
timestamp({ format: 'YY/MM/DD HH:mm:ss' }),
|
||
|
colorize(),
|
||
|
printf(info => `${info.timestamp}[${info.level}] ${info.message}`),
|
||
|
);
|
||
|
|
||
|
const enumerateErrorFormat = format((info: any) => {
|
||
|
if (info.message instanceof Error) {
|
||
|
info.message = Object.assign(
|
||
|
{
|
||
|
message: info.message.message,
|
||
|
stack: info.message.stack,
|
||
|
},
|
||
|
info.message,
|
||
|
);
|
||
|
}
|
||
|
if (info instanceof Error) {
|
||
|
return Object.assign(
|
||
|
{
|
||
|
message: info.message,
|
||
|
stack: info.stack,
|
||
|
},
|
||
|
info,
|
||
|
);
|
||
|
}
|
||
|
return info;
|
||
|
});
|
||
|
|
||
|
// levels: error, warn, info, verbose, debug, silly
|
||
|
const log = createLogger({
|
||
|
level: 'verbose',
|
||
|
exitOnError: true,
|
||
|
format: combine(enumerateErrorFormat(), timestamp(), prettyPrint()),
|
||
|
transports: [
|
||
|
new transports.File({
|
||
|
filename: `${paths.logs}/app.log`,
|
||
|
level: 'info',
|
||
|
handleExceptions: true,
|
||
|
maxsize: 5242880, // 5MB
|
||
|
maxFiles: 5,
|
||
|
}),
|
||
|
new transports.Console({
|
||
|
level: 'verbose',
|
||
|
handleExceptions: true,
|
||
|
format: custom,
|
||
|
}),
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export default log;
|