Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 4x 4x 4x 4x 4x 2x 4x 1x 3x 3x 3x 3x 3x 3x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 3x 3x 3x 1x 2x | import { ElasticsearchTransport, ElasticsearchTransportOptions } from 'winston-elasticsearch';
import * as winstonESTransformer from '@restorecommerce/winston-elasticsearch-transformer';
import * as rTracer from 'cls-rtracer';
import { WinstonLoggerOptions, Transports, format, WinstonLogger, TransportStreamArray, log } from './winston';
const mappingTemplate = winstonESTransformer.mappingTemplate;
const transformer = winstonESTransformer.transformer;
const { timestamp, printf } = format;
// a custom format that outputs request id
const rTracerFormat = printf((info) => {
const rid = rTracer.id();
const time = info.timestamp;
const level = info.level;
const message = info.message;
delete info.timestamp;
delete info.level;
delete info.message;
let object = '';
if (Object.entries(info).length !== 0 && info.constructor === Object) {
object = JSON.stringify(info);
}
return rid
? `${level} : ${time} [rid:${rid}] : ${message} ${((object))}`
: `${level} : ${time} : ${message} ${(object)}`;
});
export interface RestoreLoggerOptions extends WinstonLoggerOptions {
loggerName?: string;
console?: Transports.ConsoleTransportOptions & {
// Custom console opts here
prettyPrint?: boolean | any;
colorize?: boolean | any;
};
file?: Transports.FileTransportOptions & {
// Custom file opts here
};
elasticsearch?: ElasticsearchTransportOptions & {
source?: any;
};
}
export class Logger extends WinstonLogger {
constructor(opts: RestoreLoggerOptions) {
// Set up logging
(log as any).namespaces = true;
Iif (!opts) {
throw new Error('Options are missing');
}
// Provide TransportStream array and add opts.transports
let transports: TransportStreamArray = [];
Iif (opts.transports && !Array.isArray(transports)) {
transports = [transports];
} else Iif (Array.isArray(opts.transports)) {
transports = opts.transports;
}
if (opts.console) {
let colorize = undefined;
Eif (opts.console.colorize !== false) {
const colorizeOpts = typeof opts.console.colorize === 'object' ? opts.console.colorize : undefined;
colorize = format.colorize(colorizeOpts);
}
let prettyPrint = undefined;
Eif (opts.console.prettyPrint !== false) {
const prettyPrintOpts = typeof opts.console.prettyPrint === 'object' ? opts.console.prettyPrint : undefined;
prettyPrint = format.prettyPrint(prettyPrintOpts);
}
const consoleOpts = {
format: format.combine(
colorize,
prettyPrint,
format.simple(),
timestamp(),
rTracerFormat
),
...opts.console,
};
transports.push(new Transports.Console(consoleOpts));
}
Iif (opts.file) {
transports.push(new Transports.File(opts.file));
}
Iif (opts.elasticsearch) {
const elasticsearchOpts = {
mappingTemplate,
...opts.elasticsearch,
};
transformer.source = opts.elasticsearch.source;
elasticsearchOpts.transformer = transformer;
transports.push(new ElasticsearchTransport(elasticsearchOpts));
}
if (transports.length <= 0) {
throw new Error('Provide at least one supported transport');
}
super({
...opts,
transports
});
}
}
|