hermodlog 1.9.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hermodlog",
3
- "version": "1.9.0",
3
+ "version": "2.0.0",
4
4
  "description": "Simple contextual logger to simplify log display in heavy load context and provide easy parsing",
5
5
  "main": "src/Logger.js",
6
6
  "type": "module",
package/src/Logger.js CHANGED
@@ -15,7 +15,7 @@ import fatal from "./methods/fatal.js";
15
15
  import child from "./methods/child.js";
16
16
  import submethod from "./methods/submethod.js";
17
17
  import submodule from "./methods/submodule.js";
18
-
18
+ import handler from "./methods/handler.js";
19
19
  import LOG_COLORS from "./LOG_COLORS.js";
20
20
  import object from "./methods/object.js";
21
21
  class Logger {
@@ -32,7 +32,7 @@ class Logger {
32
32
  enumerable: false
33
33
  },
34
34
  historyLimit: {
35
- value: props.historyLimit ?? 100,
35
+ value: props.historyLimit ?? 0,
36
36
  writable: true,
37
37
  enumerable: true
38
38
  },
@@ -56,6 +56,11 @@ class Logger {
56
56
  writable: true,
57
57
  enumerable: true
58
58
  },
59
+ handlerName: {
60
+ value: props.handlerName ?? null,
61
+ writable: true,
62
+ enumerable: true
63
+ },
59
64
  listenerName: {
60
65
  value: props.listenerName ?? null,
61
66
  writable: true,
@@ -76,7 +81,6 @@ class Logger {
76
81
  writable: true,
77
82
  enumerable: true
78
83
  }
79
-
80
84
  });
81
85
 
82
86
  if (props.date) {
@@ -108,11 +112,14 @@ class Logger {
108
112
  const keepSubmodule = opts?.keepSubmodule ?? true;
109
113
  const keepListener = opts?.keepListener ?? true;
110
114
  const keepObject = opts?.keepObject ?? true;
115
+ const keepHandler = opts?.keepHandler ?? true;
116
+ const historyLimit = opts?.historyLimit ?? null;
111
117
 
112
118
  return new Logger({
113
119
  level: (keepLevel) ? this.level : opts.level ?? this.level,
114
120
  date: (keepDate) ? this.date : opts.date ?? null,
115
121
  history: keepHistory ? this.history : [],
122
+ historyLimit: historyLimit ?? this.historyLimit,
116
123
  colors: (keepColors) ? this.LOG_COLORS : opts.colors ?? this.LOG_COLORS,
117
124
  contextName: (keepContext) ? this.contextName : opts.contextName ?? null,
118
125
  methodName: (keepMethod) ? this.methodName : opts.methodName ?? null,
@@ -121,6 +128,7 @@ class Logger {
121
128
  listenerName: (keepListener) ? this.listenerName : opts.listenerName ?? null,
122
129
  submethodName: (keepSubmethod) ? this.submethodName : opts.submethodName ?? null,
123
130
  objectName: (keepObject) ? this.objectName : opts.objectName ?? null,
131
+ handlerName: (keepHandler) ? this.handlerName : opts.handlerName ?? null,
124
132
  })
125
133
  }
126
134
 
@@ -169,5 +177,6 @@ Logger.prototype.module = module;
169
177
  Logger.prototype.trace = trace;
170
178
  Logger.prototype.warn = warn;
171
179
  Logger.prototype.child = child;
180
+ Logger.prototype.handler = handler;
172
181
 
173
182
  export default Logger;
@@ -5,7 +5,7 @@ describe('Logger', () => {
5
5
  let silentLogger
6
6
  let silentModuleLogger
7
7
  it('should create an logger', () => {
8
- silentLogger = new Logger({date:new Date('2023-07-29T01:38:00.482Z')});
8
+ silentLogger = new Logger({date:new Date('2023-07-29T01:38:00.482Z'), historyLimit: 100});
9
9
  silentLogger._log = () => {}
10
10
  expect(silentLogger.history.length).toBe(0)
11
11
  silentLogger.log('Hello');
@@ -42,7 +42,7 @@ describe('Logger', () => {
42
42
  expect(silentMethodLogger.history[0]).toBe(expected)
43
43
  })
44
44
  it('should handle level', function () {
45
- const levelLogger = new Logger({level: 'error'})
45
+ const levelLogger = new Logger({level: 'error', historyLimit: 100});
46
46
  levelLogger._log = () => {}
47
47
  levelLogger.error('Hello');
48
48
  expect(levelLogger.history.length).toBe(1)
@@ -67,4 +67,18 @@ describe('Logger', () => {
67
67
  const expected = `[\u001b[90m2023-07-29T01:38:00.482Z\u001b[0m] module:\u001b[90mtest-module\u001b[0m - \u001b[32mReceived from ws client\u001b[0m \u001b[32mObject(\u001b[0m\u001b[32m{\n \"x\": 42,\n \"y\": {\n \"b\": [\n 1,\n 2,\n 3\n ]\n },\n \"req\": \"getCar\"\n}\u001b[0m\u001b[32m)\u001b[0m`;
68
68
  expect(silentModuleLogger.history[1]).toBe(expected)
69
69
  });
70
+
71
+ it('should transmit history config to child loggers', () => {
72
+ const parentLogger = new Logger({date:new Date('2023-07-29T01:38:00.482Z'), historyLimit: 123});
73
+ parentLogger._log = () => {}
74
+ parentLogger.log('hello');
75
+ expect(parentLogger.historyLimit).toBe(123)
76
+ expect(parentLogger.history.length).toBe(1)
77
+
78
+ const childLogger = parentLogger.listener('onTest')
79
+ expect(childLogger.historyLimit).toBe(123)
80
+ expect(childLogger.history.length).toBe(0)
81
+ childLogger.log('Hello');
82
+ expect(childLogger.history.length).toBe(1)
83
+ })
70
84
  })
@@ -0,0 +1,6 @@
1
+ export default function handler(_handler) {
2
+ const logger = this.clone();
3
+ logger.handlerName = _handler;
4
+ logger._log = this._log.bind(logger);
5
+ return logger;
6
+ }
@@ -1,7 +1,6 @@
1
1
  import LOG_LEVELS from "../LOG_LEVELS.js";
2
2
  import _log from "../utils/log.js";
3
3
  export default function log(...args) {
4
- // console.log(`log: ${args}`);
5
4
  if(LOG_LEVELS[this.level] > LOG_LEVELS['info']){
6
5
  return;
7
6
  }
@@ -3,15 +3,23 @@ const ESC = '\x1b';
3
3
  const createColorFn = (code) => (text) => `${ESC}[${code}m${text}${ESC}[0m`;
4
4
 
5
5
  const colors = {
6
- gray: createColorFn('90'),
6
+ black: createColorFn('30'),
7
7
  red: createColorFn('31'),
8
8
  green: createColorFn('32'),
9
9
  yellow: createColorFn('33'),
10
10
  blue: createColorFn('34'),
11
11
  magenta: createColorFn('35'),
12
12
  cyan: createColorFn('36'),
13
+ white: createColorFn('37'),
13
14
  // Bright variants
15
+ gray: createColorFn('90'),
16
+ redBright: createColorFn('91'),
17
+ greenBright: createColorFn('92'),
18
+ yellowBright: createColorFn('93'),
14
19
  blueBright: createColorFn('94'),
20
+ magentaBright: createColorFn('95'),
21
+ cyanBright: createColorFn('96'),
22
+ whiteBright: createColorFn('97'),
15
23
  };
16
24
 
17
25
  export default colors;
package/src/utils/log.js CHANGED
@@ -34,6 +34,7 @@ export default function log(level, args, context) {
34
34
 
35
35
  const hasContext = !!context.contextName;
36
36
  const hasModule = !!context.moduleName;
37
+ const hasHandler = !!context.handlerName;
37
38
  const hasListener = !!context.listenerName;
38
39
  const hasMethod = !!context.methodName;
39
40
  const hasSubmethod = !!context.submethodName;
@@ -42,7 +43,7 @@ export default function log(level, args, context) {
42
43
 
43
44
  if (hasContext) {
44
45
  message += ` context: ${colors[2](context.contextName)}`;
45
- const hasNext = hasModule || hasListener || hasMethod || hasSubmethod || hasSubmodule;
46
+ const hasNext = hasModule || hasHandler || hasListener || hasMethod || hasSubmethod || hasSubmodule;
46
47
  if (hasNext) {
47
48
  message += ' |';
48
49
  }
@@ -50,7 +51,7 @@ export default function log(level, args, context) {
50
51
 
51
52
  if (hasModule) {
52
53
  message += ` module:${colors[3](context.moduleName)}`;
53
- const hasNext = hasListener || hasMethod || hasSubmethod || hasSubmodule;
54
+ const hasNext = hasHandler || hasListener || hasMethod || hasSubmethod || hasSubmodule;
54
55
  if (hasNext) {
55
56
  message += ' |';
56
57
  }
@@ -58,7 +59,7 @@ export default function log(level, args, context) {
58
59
 
59
60
  if (hasSubmodule) {
60
61
  message += ` submodule: ${colors[6](context.submoduleName)}`;
61
- const hasNext = hasListener || hasMethod || hasSubmethod;
62
+ const hasNext = hasHandler || hasListener || hasMethod || hasSubmethod;
62
63
  if (hasNext) {
63
64
  message += ' |';
64
65
  }
@@ -66,7 +67,7 @@ export default function log(level, args, context) {
66
67
 
67
68
  if (hasMethod) {
68
69
  message += ` method: ${colors[5](context.methodName)}`;
69
- const hasNext = hasSubmethod || hasSubmodule;
70
+ const hasNext = hasHandler || hasSubmethod || hasSubmodule;
70
71
  if (hasNext) {
71
72
  message += ' |';
72
73
  }
@@ -74,7 +75,15 @@ export default function log(level, args, context) {
74
75
 
75
76
  if (hasSubmethod) {
76
77
  message += ` submethod: ${colors[6](context.submethodName)}`;
77
- const hasNext = hasListener || hasMethod || hasSubmodule;
78
+ const hasNext = hasHandler || hasListener || hasMethod || hasSubmodule;
79
+ if (hasNext) {
80
+ message += ' |';
81
+ }
82
+ }
83
+
84
+ if (hasHandler) {
85
+ message += ` handler: ${colors[4](context.handlerName)}`;
86
+ const hasNext = hasListener || hasObject;
78
87
  if (hasNext) {
79
88
  message += ' |';
80
89
  }
@@ -157,10 +166,12 @@ export default function log(level, args, context) {
157
166
  }
158
167
  }
159
168
 
169
+ const historyLimit = context?.historyLimit;
170
+ if (historyLimit) {
160
171
  context.history.push(message);
161
- const historyLimit = context.historyLimit || 100;
162
- if (context.history.length > historyLimit) {
163
- context.history.shift();
172
+ if (context.history.length > historyLimit) {
173
+ context.history.shift();
174
+ }
164
175
  }
165
176
 
166
177
  context._log(message);
package/usage.example.js CHANGED
@@ -43,4 +43,4 @@ el.log(10);
43
43
  console.log(el.getHistory(2,{fromDate: new Date('2025-10-08T02:52:20')}));
44
44
 
45
45
 
46
- el.submodule('submodule1').log('submodule1');
46
+ el.submodule('submodule1').handler('handler1').log('submodule1');
File without changes