1 | import colors from 'colors'
|
2 | import winston, { Logger, LoggerOptions } from 'winston'
|
3 | import timestamp from 'time-stamp';
|
4 | import supportsColor from 'color-support'
|
5 |
|
6 | function hasFlag (flag: string) {
|
7 | return ((typeof (process) !== 'undefined') && (process.argv.indexOf('--' + flag) !== -1))
|
8 | }
|
9 |
|
10 | function addColor (str: string) {
|
11 | if (hasFlag('no-color')) {
|
12 | return str
|
13 | }
|
14 |
|
15 | if (hasFlag('color')) {
|
16 | return colors.gray(str)
|
17 | }
|
18 |
|
19 | if (supportsColor()) {
|
20 | return colors.gray(str)
|
21 | }
|
22 |
|
23 | return str
|
24 | }
|
25 | function getTimestamp () {
|
26 | return '[' + addColor(timestamp('HH:mm:ss')) + ']'
|
27 | }
|
28 |
|
29 | const logFmt = winston.format.printf((info) => {
|
30 | return `${getTimestamp()} ${info.level}: ${info.message}`
|
31 | })
|
32 |
|
33 | class Log {
|
34 | logger: Logger;
|
35 | constructor () {
|
36 | this.logger = winston.createLogger({
|
37 | level: 'error',
|
38 | transports: [new winston.transports.Console()],
|
39 | format: winston.format.combine(
|
40 | winston.format.colorize({ all: true }),
|
41 | logFmt
|
42 | )
|
43 | })
|
44 | }
|
45 | setVerbosity (v: LoggerOptions["level"]) {
|
46 | this.logger.configure({
|
47 | level: v,
|
48 | transports: [new winston.transports.Console()],
|
49 | format: winston.format.combine(
|
50 | winston.format.colorize({ all: true }),
|
51 | logFmt
|
52 | )
|
53 | })
|
54 | }
|
55 | }
|
56 |
|
57 | export = Log
|