generated from MatrixAI/TypeScript-Demo-Lib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathformatting.ts
80 lines (75 loc) · 1.99 KB
/
formatting.ts
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
import type { LogRecord, LogFormatter } from './types.js';
import * as utils from './utils.js';
const level = Symbol('level');
const key = Symbol('key');
const keys = Symbol('keys');
const date = Symbol('date');
const msg = Symbol('msg');
const stack = Symbol('stack');
const data = Symbol('data');
function format(
strings: TemplateStringsArray,
...values: Array<any>
): LogFormatter {
return (record: LogRecord): string => {
let result = strings[0];
for (let i = 0; i < values.length; i++) {
const value = values[i];
if (value === key) {
result += record.key;
} else if (value === keys) {
result += record.keys;
} else if (value === date) {
result += record.date().toISOString();
} else if (value === msg) {
if (record.msg != null) result += record.msg;
} else if (value === level) {
result += utils.levelToString(record.level);
} else if (value === data) {
result += utils.evalLogData(record.data);
} else if (value === stack) {
const stack = record.stack();
if (stack !== '') result += '\n' + stack;
} else {
result += value.toString();
}
result += strings[i + 1];
}
return result;
};
}
/**
* Default formatter
* This only shows the level, key and msg
*/
const formatter = format`${level}:${key}:${msg}`;
/**
* Default JSON formatter for structured logging
* You should replace this with a formatter based on your required schema
* Note that `LogRecord` contains `LogData`, which may contain lazy values
* You must use `utils.evalLogData` or `utils.evalLogDataValue` to evaluate
* the `LogData`
*/
const jsonFormatter: LogFormatter = (record: LogRecord) => {
return JSON.stringify(
{
level: utils.levelToString(record.level),
key: record.key,
msg: record.msg,
...record.data,
},
utils.evalLogDataValue,
);
};
export {
level,
key,
keys,
date,
msg,
stack,
data,
format,
formatter,
jsonFormatter,
};