-
-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathlog.js
105 lines (83 loc) · 1.83 KB
/
log.js
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
'use strict';
const bunyan = require('hexo-bunyan');
const chalk = require('chalk');
const Writable = require('stream').Writable;
const levelNames = {
10: 'TRACE',
20: 'DEBUG',
30: 'INFO ',
40: 'WARN ',
50: 'ERROR',
60: 'FATAL'
};
const levelColors = {
10: 'gray',
20: 'gray',
30: 'green',
40: 'bgYellow',
50: 'bgRed',
60: 'bgRed'
};
function ConsoleStream(env) {
Writable.call(this, {objectMode: true});
this.debug = env.debug;
}
require('util').inherits(ConsoleStream, Writable);
ConsoleStream.prototype._write = function(data, enc, callback) {
const level = data.level;
let msg = '';
// Time
if (this.debug) {
msg += chalk.gray(formatTime(data.time)) + ' ';
}
// Level
msg += chalk[levelColors[level]](levelNames[level]) + ' ';
// Message
msg += data.msg + '\n';
// Error
if (data.err) {
const err = data.err.stack || data.err.message;
if (err) msg += chalk.yellow(err) + '\n';
}
if (level >= 40) {
process.stderr.write(msg);
} else {
process.stdout.write(msg);
}
callback();
};
function formatTime(date) {
return date.toISOString().substring(11, 23);
}
function createLogger(options) {
options = options || {};
const streams = [];
if (!options.silent) {
streams.push({
type: 'raw',
level: options.debug ? 'trace' : 'info',
stream: new ConsoleStream(options)
});
}
if (options.debug) {
streams.push({
level: 'trace',
path: 'debug.log'
});
}
const logger = bunyan.createLogger({
name: options.name || 'hexo',
streams,
serializers: {
err: bunyan.stdSerializers.err
}
});
// Alias for logger levels
logger.d = logger.debug;
logger.i = logger.info;
logger.w = logger.warn;
logger.e = logger.error;
logger.log = logger.info;
return logger;
}
module.exports = createLogger;