1 |
|
2 | import * as cluster from 'cluster';
|
3 | import * as core from '@akala/core'
|
4 |
|
5 | let customOutputs = ['error', 'warn', 'verbose', 'debug', 'info']
|
6 |
|
7 | export interface Logger
|
8 | {
|
9 | error?: debug.IDebugger,
|
10 | warn?: debug.IDebugger,
|
11 | verbose?: debug.IDebugger,
|
12 | debug?: debug.IDebugger,
|
13 | info?: debug.IDebugger,
|
14 | [key: string]: debug.IDebugger
|
15 | }
|
16 |
|
17 | export var logger: Logger & ((rootNamespace: string) => Logger) = <any>new Proxy(function (rootNamespace: string): Logger
|
18 | {
|
19 | return new Proxy({}, {
|
20 | get: function (target, prop)
|
21 | {
|
22 | if (!Reflect.has(target, prop) && typeof (prop) == 'string')
|
23 | target[prop] = log(prop + ':' + rootNamespace);
|
24 | return Reflect.get(target, prop);
|
25 | }
|
26 | })
|
27 | }, {
|
28 | get: function (target, prop)
|
29 | {
|
30 | if (!Reflect.has(target, prop) && typeof (prop) == 'string')
|
31 | target[prop] = log(prop);
|
32 | return Reflect.get(target, prop);
|
33 | }
|
34 | });
|
35 |
|
36 | export function log(namespace: string): debug.Debugger
|
37 | {
|
38 | if (!cluster.isMaster)
|
39 | {
|
40 | var customOutput = customOutputs.find(o => namespace.startsWith(o + ':'));
|
41 | if (customOutput)
|
42 | namespace = namespace.substring((customOutput + ':').length);
|
43 |
|
44 | customOutput = customOutput || customOutputs.find(o => namespace == o);
|
45 |
|
46 | var moduleNamespace = process.argv[2].replace(/[@\/]/g, ':');
|
47 | if (moduleNamespace[0] == ':')
|
48 | moduleNamespace = moduleNamespace.substring(1);
|
49 | if (customOutput)
|
50 | {
|
51 | if (namespace == moduleNamespace || customOutput == namespace)
|
52 | namespace = moduleNamespace = customOutput + ':' + moduleNamespace;
|
53 | else
|
54 | moduleNamespace = customOutput + ':' + moduleNamespace;
|
55 | }
|
56 | if (!namespace.startsWith(moduleNamespace))
|
57 | namespace = moduleNamespace + ':' + namespace;
|
58 | }
|
59 | return core.log(namespace);
|
60 | } |
\ | No newline at end of file |