-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.js
More file actions
32 lines (26 loc) · 896 Bytes
/
logger.js
File metadata and controls
32 lines (26 loc) · 896 Bytes
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
'use strict';
const fs = require('node:fs');
// file => serializer => app => module => kind => msg
const logger = (file) => {
const { isTTY } = file;
const stream = isTTY ? file : fs.createWriteStream(file);
const { defaultSerializer } = logger;
return (serializer = defaultSerializer) => (app) => (module) => (kind) => {
const color = isTTY ? (logger.colors[kind] || logger.colors.info) : '';
const normal = isTTY ? logger.colors.normal : '';
return (msg) => {
const date = new Date().toISOString();
const record = { date, kind, app, module, msg };
const line = serializer(record);
stream.write(color + line + normal + '\n');
};
};
};
logger.defaultSerializer = (obj) => Object.values(obj).join('\t');
logger.colors = {
warning: '\x1b[1;33m',
error: '\x1b[0;31m',
info: '\x1b[1;37m',
normal: '\x1b[0m',
};
module.exports = logger;