hazo_logs 1.2.1 → 2.0.2
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/README.md +73 -0
- package/config/hazo_logs_config.ini.sample +2 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/alert-triggers.d.ts.map +1 -1
- package/dist/lib/alert-triggers.js +4 -5
- package/dist/lib/alert-triggers.js.map +1 -1
- package/dist/lib/config_loader.d.ts.map +1 -1
- package/dist/lib/config_loader.js +0 -6
- package/dist/lib/config_loader.js.map +1 -1
- package/dist/lib/console-logger.d.ts +16 -1
- package/dist/lib/console-logger.d.ts.map +1 -1
- package/dist/lib/console-logger.js +36 -0
- package/dist/lib/console-logger.js.map +1 -1
- package/dist/lib/eslint_plugin/index.d.ts +109 -0
- package/dist/lib/eslint_plugin/index.d.ts.map +1 -0
- package/dist/lib/eslint_plugin/index.js +168 -0
- package/dist/lib/eslint_plugin/index.js.map +1 -0
- package/dist/lib/global-error-handlers.d.ts.map +1 -1
- package/dist/lib/global-error-handlers.js +2 -1
- package/dist/lib/global-error-handlers.js.map +1 -1
- package/dist/lib/hazo_logger.d.ts.map +1 -1
- package/dist/lib/hazo_logger.js +1 -0
- package/dist/lib/hazo_logger.js.map +1 -1
- package/dist/lib/level_resolver.d.ts +26 -0
- package/dist/lib/level_resolver.d.ts.map +1 -0
- package/dist/lib/level_resolver.js +65 -0
- package/dist/lib/level_resolver.js.map +1 -0
- package/dist/lib/log-reader.d.ts.map +1 -1
- package/dist/lib/log-reader.js +1 -0
- package/dist/lib/log-reader.js.map +1 -1
- package/dist/lib/package_logger.d.ts +46 -3
- package/dist/lib/package_logger.d.ts.map +1 -1
- package/dist/lib/package_logger.js +190 -6
- package/dist/lib/package_logger.js.map +1 -1
- package/dist/lib/ring_buffer.d.ts +51 -0
- package/dist/lib/ring_buffer.d.ts.map +1 -0
- package/dist/lib/ring_buffer.js +107 -0
- package/dist/lib/ring_buffer.js.map +1 -0
- package/dist/lib/types.d.ts +24 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/universal-logger.d.ts.map +1 -1
- package/dist/lib/universal-logger.js +15 -0
- package/dist/lib/universal-logger.js.map +1 -1
- package/dist/lib/utils/caller_info.d.ts +25 -1
- package/dist/lib/utils/caller_info.d.ts.map +1 -1
- package/dist/lib/utils/caller_info.js +62 -1
- package/dist/lib/utils/caller_info.js.map +1 -1
- package/dist/lib/with-error-handler.d.ts.map +1 -1
- package/dist/lib/with-error-handler.js +2 -1
- package/dist/lib/with-error-handler.js.map +1 -1
- package/dist/server.d.ts +14 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -2
- package/dist/server.js.map +1 -1
- package/dist/ui/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/ui/components/ErrorBoundary.js +3 -2
- package/dist/ui/components/ErrorBoundary.js.map +1 -1
- package/dist/ui/hooks/useErrorReporter.d.ts.map +1 -1
- package/dist/ui/hooks/useErrorReporter.js +4 -3
- package/dist/ui/hooks/useErrorReporter.js.map +1 -1
- package/dist/ui/server.d.ts +10 -4
- package/dist/ui/server.d.ts.map +1 -1
- package/dist/ui/server.js +10 -4
- package/dist/ui/server.js.map +1 -1
- package/package.json +15 -7
package/README.md
CHANGED
|
@@ -5,6 +5,79 @@ A Winston-based logging library for Node.js/Next.js applications with a built-in
|
|
|
5
5
|
[](https://www.npmjs.com/package/hazo_logs)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
|
+
## Log Level Convention
|
|
9
|
+
|
|
10
|
+
hazo_logs uses a 5-level system (from design spec D-015). Each level has a defined purpose — use the narrowest one that fits.
|
|
11
|
+
|
|
12
|
+
| Level | When to use |
|
|
13
|
+
|-------|-------------|
|
|
14
|
+
| `TRACE` | High-frequency operational noise: polling ticks, cache hits, ping responses. Off in production. |
|
|
15
|
+
| `DEBUG` | Operational detail useful when actively debugging a problem. Off in production. |
|
|
16
|
+
| `INFO` | State changes and user-facing events (login, job started, order placed). Default level in dev. |
|
|
17
|
+
| `WARN` | Recoverable problems: rate-limited, retrying, degraded-mode fallback. Default level in production. |
|
|
18
|
+
| `ERROR` | Unrecovered failures that require attention: unhandled exception, data loss, external service down. |
|
|
19
|
+
|
|
20
|
+
### Default levels
|
|
21
|
+
|
|
22
|
+
| Environment | Default level |
|
|
23
|
+
|-------------|--------------|
|
|
24
|
+
| `development` / `test` (`NODE_ENV`) | `info` |
|
|
25
|
+
| `production` / `staging` (`HAZO_ENV` or `NODE_ENV`) | `warn` |
|
|
26
|
+
|
|
27
|
+
The resolver checks `HAZO_ENV` first, then `NODE_ENV`, then falls back to `development`.
|
|
28
|
+
|
|
29
|
+
### Per-namespace overrides (INI config)
|
|
30
|
+
|
|
31
|
+
Fine-tune the level for a specific package or sub-namespace in `config/hazo_logs_config.ini`:
|
|
32
|
+
|
|
33
|
+
```ini
|
|
34
|
+
[log.overrides]
|
|
35
|
+
; Package-level — matches hazo_chat and any hazo_chat/* sub-namespace
|
|
36
|
+
hazo_chat = warn
|
|
37
|
+
|
|
38
|
+
; Sub-namespace — more specific, takes precedence over the package-level override
|
|
39
|
+
hazo_chat/poll = error
|
|
40
|
+
|
|
41
|
+
; Prefix match — matches any hazo_files/* sub-namespace
|
|
42
|
+
hazo_files/ = debug
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Precedence (highest wins): exact match > prefix match > package-level > global default.
|
|
46
|
+
|
|
47
|
+
You can also use environment variables to override INI config at runtime:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
HAZO_LOGS_LOG_OVERRIDES_hazo_files=debug node server.js
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Smart logging helpers
|
|
54
|
+
|
|
55
|
+
Use these instead of raw `log.info` loops to reduce noise without losing signal:
|
|
56
|
+
|
|
57
|
+
**`log.heartbeat(name, { status, ...fields }, opts?)`**
|
|
58
|
+
Emits only on state change. Silent on repeated same-status calls. Use for "is it still working?" checks on polled resources (DB connectivity, external API, queue depth).
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// Emits once when connected, once on disconnect, once when it reconnects
|
|
62
|
+
log.heartbeat('db.primary', { status: connected ? 'ok' : 'down', latencyMs });
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**`log.sampled(level, msg, fields?, { sample })`**
|
|
66
|
+
Emits with the given probability. Default sample rate is 0.1 (10%). Use for high-frequency paths where you want occasional visibility without flooding logs.
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
// Logs roughly 1 in 10 cache hits
|
|
70
|
+
log.sampled('debug', 'cache.hit', { key }, { sample: 0.1 });
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**`log.dedupe(level, msg, fields?, { window, key? })`**
|
|
74
|
+
Collapses identical-keyed messages within a time window. The first occurrence emits immediately; at window end, if more than one occurred, emits a summary `"msg (×N over Xs)"`. Use when the same warning fires rapidly (e.g. validation errors on bulk import).
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
// First occurrence emits; subsequent in the same minute are collapsed
|
|
78
|
+
log.dedupe('warn', 'validation.failed', { field }, { window: '1m' });
|
|
79
|
+
```
|
|
80
|
+
|
|
8
81
|
## Features
|
|
9
82
|
|
|
10
83
|
- **Structured Logging**: Winston wrapper with singleton pattern for consistent logging across your app
|
package/dist/index.d.ts
CHANGED
|
@@ -33,5 +33,10 @@
|
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
35
|
export { createLogger, createLoggerAsync, preloadServerLogger, ConsoleLogger, } from './lib/universal-logger.js';
|
|
36
|
-
export
|
|
36
|
+
export { getRingBuffer, RingBuffer, RingBufferRegistry, ringBufferRegistry } from './lib/ring_buffer.js';
|
|
37
|
+
export { getCallerInfo, get_filename, get_line_number } from './lib/utils/caller_info.js';
|
|
38
|
+
export type { CallerInfo } from './lib/utils/caller_info.js';
|
|
39
|
+
export { LevelResolver } from './lib/level_resolver.js';
|
|
40
|
+
export type { OverrideMap } from './lib/level_resolver.js';
|
|
41
|
+
export type { Logger, LogLevel, LogData, LogEntry, LogContext, HazoLogConfig, PackageLoggerOptions, LogSource, LogOrigin, RingBufferEntry, } from './lib/types.js';
|
|
37
42
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EACV,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGzG,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC1F,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,YAAY,EACV,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,eAAe,GAChB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -34,4 +34,10 @@
|
|
|
34
34
|
*/
|
|
35
35
|
// Universal logger - works on both server and client
|
|
36
36
|
export { createLogger, createLoggerAsync, preloadServerLogger, ConsoleLogger, } from './lib/universal-logger.js';
|
|
37
|
+
// Ring buffer — safe for server; no-ops on client
|
|
38
|
+
export { getRingBuffer, RingBuffer, RingBufferRegistry, ringBufferRegistry } from './lib/ring_buffer.js';
|
|
39
|
+
// Caller-info utilities — server-side stack-trace helpers
|
|
40
|
+
export { getCallerInfo, get_filename, get_line_number } from './lib/utils/caller_info.js';
|
|
41
|
+
// LevelResolver — pure logic, no Node.js deps, safe for universal use
|
|
42
|
+
export { LevelResolver } from './lib/level_resolver.js';
|
|
37
43
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,qDAAqD;AACrD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,qDAAqD;AACrD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,kDAAkD;AAClD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEzG,0DAA0D;AAC1D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG1F,sEAAsE;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-triggers.d.ts","sourceRoot":"","sources":["../../src/lib/alert-triggers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"alert-triggers.d.ts","sourceRoot":"","sources":["../../src/lib/alert-triggers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;IAC7D,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE;QACT,iDAAiD;QACjD,KAAK,EAAE,MAAM,CAAC;QACd,yEAAyE;QACzE,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AA2DD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,IAAI,CA2B3E"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Requires hazo_notify to be installed (optional peer dep).
|
|
5
5
|
* Sliding window state is in-memory — resets on process restart.
|
|
6
6
|
*/
|
|
7
|
+
import { optional_import } from 'hazo_core';
|
|
7
8
|
import { HazoLogger } from './hazo_logger.js';
|
|
8
9
|
const HAZO_LOG_LEVEL_PRIORITY = {
|
|
9
10
|
fatal: 0,
|
|
@@ -11,6 +12,7 @@ const HAZO_LOG_LEVEL_PRIORITY = {
|
|
|
11
12
|
warn: 2,
|
|
12
13
|
info: 3,
|
|
13
14
|
debug: 4,
|
|
15
|
+
trace: 5,
|
|
14
16
|
};
|
|
15
17
|
function matchesTrigger(entry, match) {
|
|
16
18
|
if (match.level) {
|
|
@@ -28,11 +30,8 @@ function matchesTrigger(entry, match) {
|
|
|
28
30
|
return true;
|
|
29
31
|
}
|
|
30
32
|
async function fireNotification(config, entry) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
dispatcher = await import('hazo_notify/dispatcher');
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
33
|
+
const dispatcher = await optional_import('hazo_notify/dispatcher');
|
|
34
|
+
if (!dispatcher) {
|
|
36
35
|
console.error(`[hazo_logs] Alert trigger "${config.id}" fired but hazo_notify is not installed. ` +
|
|
37
36
|
'Add hazo_notify as a dependency to receive alert notifications.');
|
|
38
37
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-triggers.js","sourceRoot":"","sources":["../../src/lib/alert-triggers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAmC9C,MAAM,uBAAuB,GAA6B;IACxD,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,SAAS,cAAc,CAAC,KAAe,EAAE,KAAwB;IAC/D,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,4DAA4D;QAC5D,IAAI,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAChF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAA0B,EAAE,KAAe;IACzE,
|
|
1
|
+
{"version":3,"file":"alert-triggers.js","sourceRoot":"","sources":["../../src/lib/alert-triggers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config_loader.d.ts","sourceRoot":"","sources":["../../src/lib/config_loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config_loader.d.ts","sourceRoot":"","sources":["../../src/lib/config_loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,YAAY,CAAC;AAKhE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CA6B7D"}
|
|
@@ -7,8 +7,6 @@ import path from 'path';
|
|
|
7
7
|
import ini from 'ini';
|
|
8
8
|
import { DEFAULT_CONFIG } from './utils/constants.js';
|
|
9
9
|
const CONFIG_FILENAME = 'config/hazo_logs_config.ini';
|
|
10
|
-
// Track whether the missing config warning has been shown
|
|
11
|
-
let _config_warning_shown = false;
|
|
12
10
|
/**
|
|
13
11
|
* Load configuration from INI file
|
|
14
12
|
* @param configPath - Optional explicit path to config file
|
|
@@ -17,10 +15,6 @@ let _config_warning_shown = false;
|
|
|
17
15
|
export function loadConfig(configPath) {
|
|
18
16
|
const resolvedPath = configPath || findConfigFile();
|
|
19
17
|
if (!resolvedPath || !fs.existsSync(resolvedPath)) {
|
|
20
|
-
if (!_config_warning_shown) {
|
|
21
|
-
_config_warning_shown = true;
|
|
22
|
-
console.warn(`[HazoLog] No config found, using defaults. Create ${CONFIG_FILENAME} to customize.`);
|
|
23
|
-
}
|
|
24
18
|
return { ...DEFAULT_CONFIG };
|
|
25
19
|
}
|
|
26
20
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config_loader.js","sourceRoot":"","sources":["../../src/lib/config_loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"config_loader.js","sourceRoot":"","sources":["../../src/lib/config_loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* This module imports ONLY from types.ts (pure type definitions)
|
|
6
6
|
* so it is safe for both server and client environments.
|
|
7
7
|
*/
|
|
8
|
-
import type { Logger, LogData, LogLevel } from './types.js';
|
|
8
|
+
import type { Logger, LogData, LogLevel, RingBufferEntry } from './types.js';
|
|
9
9
|
export declare const LOG_LEVEL_PRIORITY: Record<LogLevel, number>;
|
|
10
10
|
/**
|
|
11
11
|
* Console-based logger for client-side use
|
|
@@ -23,5 +23,20 @@ export declare class ConsoleLogger implements Logger {
|
|
|
23
23
|
warn(message: string, data?: LogData): void;
|
|
24
24
|
info(message: string, data?: LogData): void;
|
|
25
25
|
debug(message: string, data?: LogData): void;
|
|
26
|
+
trace(message: string, data?: LogData): void;
|
|
27
|
+
heartbeat(_name: string, _fields: {
|
|
28
|
+
status: string;
|
|
29
|
+
[key: string]: unknown;
|
|
30
|
+
}, _opts?: {
|
|
31
|
+
trigger?: (prev: Record<string, unknown>, curr: Record<string, unknown>) => boolean;
|
|
32
|
+
}): void;
|
|
33
|
+
sampled(level: 'trace' | 'debug' | 'info' | 'warn', msg: string, fields?: Record<string, unknown>, opts?: {
|
|
34
|
+
sample: number;
|
|
35
|
+
}): void;
|
|
36
|
+
dedupe(level: 'trace' | 'debug' | 'info' | 'warn', msg: string, fields?: Record<string, unknown>, _opts?: {
|
|
37
|
+
window: string;
|
|
38
|
+
key?: string;
|
|
39
|
+
}): void;
|
|
40
|
+
getRingBuffer(_correlationId: string, _n?: number): RingBufferEntry[];
|
|
26
41
|
}
|
|
27
42
|
//# sourceMappingURL=console-logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console-logger.d.ts","sourceRoot":"","sources":["../../src/lib/console-logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"console-logger.d.ts","sourceRoot":"","sources":["../../src/lib/console-logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7E,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOvD,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,MAAM,CAAC,CAA2E;gBAE9E,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAkB,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI;IAMhJ,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,aAAa;IAKrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAO5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAO5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAO3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAO3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAO5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAU5C,SAAS,CACP,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EACnD,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;KAAE,GAC9F,IAAI;IAOP,OAAO,CACL,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EAC1C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GACxB,IAAI;IAUP,MAAM,CACJ,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EAC1C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACvC,IAAI;IASP,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE;CAItE"}
|
|
@@ -11,6 +11,7 @@ export const LOG_LEVEL_PRIORITY = {
|
|
|
11
11
|
warn: 2,
|
|
12
12
|
info: 3,
|
|
13
13
|
debug: 4,
|
|
14
|
+
trace: 5,
|
|
14
15
|
};
|
|
15
16
|
/**
|
|
16
17
|
* Console-based logger for client-side use
|
|
@@ -62,5 +63,40 @@ export class ConsoleLogger {
|
|
|
62
63
|
this.on_log?.('debug', message, data);
|
|
63
64
|
}
|
|
64
65
|
}
|
|
66
|
+
trace(message, data) {
|
|
67
|
+
if (this.shouldLog('trace')) {
|
|
68
|
+
// Use console.debug for trace — console.trace prints a stack trace
|
|
69
|
+
console.debug(this.formatMessage('trace', message), data ?? '');
|
|
70
|
+
this.on_log?.('trace', message, data);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// ─── Smart helpers (no-ops on client — server-side state would be meaningless) ─
|
|
74
|
+
heartbeat(_name, _fields, _opts) {
|
|
75
|
+
// Client-side: emit at debug level so it is at least visible when debugging
|
|
76
|
+
if (this.shouldLog('debug')) {
|
|
77
|
+
console.debug(this.formatMessage('debug', `heartbeat: ${_name}`), _fields);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
sampled(level, msg, fields, opts) {
|
|
81
|
+
const sample = opts?.sample ?? 0.1;
|
|
82
|
+
if (Math.random() < sample && this.shouldLog(level)) {
|
|
83
|
+
const sampleLabel = `(sampled ~1/${Math.round(1 / sample)})`;
|
|
84
|
+
const method = level === 'warn' ? 'warn' : level === 'info' ? 'info' : 'debug';
|
|
85
|
+
console[method](this.formatMessage(level, `${msg} ${sampleLabel}`), fields ?? '');
|
|
86
|
+
this.on_log?.(level, `${msg} ${sampleLabel}`, fields);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
dedupe(level, msg, fields, _opts) {
|
|
90
|
+
// Client-side: no deduplication state — just emit
|
|
91
|
+
if (this.shouldLog(level)) {
|
|
92
|
+
const method = level === 'warn' ? 'warn' : level === 'info' ? 'info' : 'debug';
|
|
93
|
+
console[method](this.formatMessage(level, msg), fields ?? '');
|
|
94
|
+
this.on_log?.(level, msg, fields);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
getRingBuffer(_correlationId, _n) {
|
|
98
|
+
// Client-side: no ring buffer
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
65
101
|
}
|
|
66
102
|
//# sourceMappingURL=console-logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../src/lib/console-logger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../src/lib/console-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hazo-logs ESLint plugin
|
|
3
|
+
*
|
|
4
|
+
* Provides 3 rules that enforce the structured-first log API from design spec §2.5.
|
|
5
|
+
*
|
|
6
|
+
* Usage (flat-config):
|
|
7
|
+
* import { plugin as hazoLogsPlugin } from 'hazo_logs/eslint-plugin';
|
|
8
|
+
*
|
|
9
|
+
* export default [
|
|
10
|
+
* {
|
|
11
|
+
* plugins: { 'hazo-logs': hazoLogsPlugin },
|
|
12
|
+
* rules: {
|
|
13
|
+
* ...hazoLogsPlugin.configs.recommended.rules,
|
|
14
|
+
* },
|
|
15
|
+
* },
|
|
16
|
+
* ];
|
|
17
|
+
*/
|
|
18
|
+
interface Node {
|
|
19
|
+
type: string;
|
|
20
|
+
}
|
|
21
|
+
interface MemberExpression extends Node {
|
|
22
|
+
type: 'MemberExpression';
|
|
23
|
+
computed: boolean;
|
|
24
|
+
property: Node;
|
|
25
|
+
}
|
|
26
|
+
interface CallExpressionNode extends Node {
|
|
27
|
+
type: 'CallExpression';
|
|
28
|
+
callee: MemberExpression & Node;
|
|
29
|
+
arguments: Node[];
|
|
30
|
+
}
|
|
31
|
+
export declare const plugin: {
|
|
32
|
+
rules: {
|
|
33
|
+
'no-template-message': {
|
|
34
|
+
meta: {
|
|
35
|
+
type: "suggestion";
|
|
36
|
+
docs: {
|
|
37
|
+
description: string;
|
|
38
|
+
recommended: boolean;
|
|
39
|
+
};
|
|
40
|
+
schema: never[];
|
|
41
|
+
messages: {
|
|
42
|
+
noTemplate: string;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
create(context: {
|
|
46
|
+
report(opts: {
|
|
47
|
+
node: Node;
|
|
48
|
+
messageId: string;
|
|
49
|
+
}): void;
|
|
50
|
+
}): {
|
|
51
|
+
CallExpression(node: CallExpressionNode): void;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
'no-string-concat-message': {
|
|
55
|
+
meta: {
|
|
56
|
+
type: "suggestion";
|
|
57
|
+
docs: {
|
|
58
|
+
description: string;
|
|
59
|
+
recommended: boolean;
|
|
60
|
+
};
|
|
61
|
+
schema: never[];
|
|
62
|
+
messages: {
|
|
63
|
+
noConcat: string;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
create(context: {
|
|
67
|
+
report(opts: {
|
|
68
|
+
node: Node;
|
|
69
|
+
messageId: string;
|
|
70
|
+
}): void;
|
|
71
|
+
}): {
|
|
72
|
+
CallExpression(node: CallExpressionNode): void;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
'event-name-format': {
|
|
76
|
+
meta: {
|
|
77
|
+
type: "suggestion";
|
|
78
|
+
docs: {
|
|
79
|
+
description: string;
|
|
80
|
+
recommended: boolean;
|
|
81
|
+
};
|
|
82
|
+
schema: never[];
|
|
83
|
+
messages: {
|
|
84
|
+
sentenceCase: string;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
create(context: {
|
|
88
|
+
report(opts: {
|
|
89
|
+
node: Node;
|
|
90
|
+
messageId: string;
|
|
91
|
+
data?: Record<string, string>;
|
|
92
|
+
}): void;
|
|
93
|
+
}): {
|
|
94
|
+
CallExpression(node: CallExpressionNode): void;
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
configs: {
|
|
99
|
+
recommended: {
|
|
100
|
+
rules: {
|
|
101
|
+
'hazo-logs/no-template-message': string;
|
|
102
|
+
'hazo-logs/no-string-concat-message': string;
|
|
103
|
+
'hazo-logs/event-name-format': string;
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
export default plugin;
|
|
109
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/eslint_plugin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAuBH,UAAU,IAAI;IAAG,IAAI,EAAE,MAAM,CAAA;CAAE;AAK/B,UAAU,gBAAiB,SAAQ,IAAI;IAAG,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAA;CAAE;AACvG,UAAU,kBAAmB,SAAQ,IAAI;IAAG,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,IAAI,EAAE,CAAA;CAAE;AAiIxH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;4BA5GD;gBAAE,MAAM,CAAC,IAAI,EAAE;oBAAE,IAAI,EAAE,IAAI,CAAC;oBAAC,SAAS,EAAE,MAAM,CAAA;iBAAE,GAAG,IAAI,CAAA;aAAE;qCAEhD,kBAAkB;;;;;;;;;;;;;;;4BA4C3B;gBAAE,MAAM,CAAC,IAAI,EAAE;oBAAE,IAAI,EAAE,IAAI,CAAC;oBAAC,SAAS,EAAE,MAAM,CAAA;iBAAE,GAAG,IAAI,CAAA;aAAE;qCAEhD,kBAAkB;;;;;;;;;;;;;;;4BAqC3B;gBAAE,MAAM,CAAC,IAAI,EAAE;oBAAE,IAAI,EAAE,IAAI,CAAC;oBAAC,SAAS,EAAE,MAAM,CAAC;oBAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;iBAAE,GAAG,IAAI,CAAA;aAAE;qCAE/E,kBAAkB;;;;;;;;;;;;;CAoC5C,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hazo-logs ESLint plugin
|
|
3
|
+
*
|
|
4
|
+
* Provides 3 rules that enforce the structured-first log API from design spec §2.5.
|
|
5
|
+
*
|
|
6
|
+
* Usage (flat-config):
|
|
7
|
+
* import { plugin as hazoLogsPlugin } from 'hazo_logs/eslint-plugin';
|
|
8
|
+
*
|
|
9
|
+
* export default [
|
|
10
|
+
* {
|
|
11
|
+
* plugins: { 'hazo-logs': hazoLogsPlugin },
|
|
12
|
+
* rules: {
|
|
13
|
+
* ...hazoLogsPlugin.configs.recommended.rules,
|
|
14
|
+
* },
|
|
15
|
+
* },
|
|
16
|
+
* ];
|
|
17
|
+
*/
|
|
18
|
+
// ─── Shared helpers ───────────────────────────────────────────────────────────
|
|
19
|
+
/** The log method names we care about */
|
|
20
|
+
const LOG_METHODS = new Set(['trace', 'debug', 'info', 'warn', 'error', 'fatal']);
|
|
21
|
+
/**
|
|
22
|
+
* Returns true when the call expression is a log method call:
|
|
23
|
+
* log.info(...) logger.warn(...) this.log.debug(...)
|
|
24
|
+
*/
|
|
25
|
+
function isLogCall(node) {
|
|
26
|
+
if (node.callee.type !== 'MemberExpression')
|
|
27
|
+
return false;
|
|
28
|
+
const prop = node.callee.property;
|
|
29
|
+
return (!node.callee.computed &&
|
|
30
|
+
prop.type === 'Identifier' &&
|
|
31
|
+
LOG_METHODS.has(prop.name));
|
|
32
|
+
}
|
|
33
|
+
// ─── Rule: no-template-message ────────────────────────────────────────────────
|
|
34
|
+
/**
|
|
35
|
+
* Flags: log.info(`User ${id} did something`)
|
|
36
|
+
* Template literals with embedded expressions in the first arg of a log call.
|
|
37
|
+
*/
|
|
38
|
+
const noTemplateMessage = {
|
|
39
|
+
meta: {
|
|
40
|
+
type: 'suggestion',
|
|
41
|
+
docs: {
|
|
42
|
+
description: 'Disallow template literals with expressions as log message argument',
|
|
43
|
+
recommended: true,
|
|
44
|
+
},
|
|
45
|
+
schema: [],
|
|
46
|
+
messages: {
|
|
47
|
+
noTemplate: 'Log message should be a plain string event name (e.g. "user.logged_in"), not a template literal with interpolations. Put variable data in the second argument (fields).',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
create(context) {
|
|
51
|
+
return {
|
|
52
|
+
CallExpression(node) {
|
|
53
|
+
if (!isLogCall(node))
|
|
54
|
+
return;
|
|
55
|
+
const firstArg = node.arguments[0];
|
|
56
|
+
if (!firstArg)
|
|
57
|
+
return;
|
|
58
|
+
if (firstArg.type === 'TemplateLiteral' &&
|
|
59
|
+
firstArg.expressions.length > 0) {
|
|
60
|
+
context.report({ node: firstArg, messageId: 'noTemplate' });
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
// ─── Rule: no-string-concat-message ──────────────────────────────────────────
|
|
67
|
+
/**
|
|
68
|
+
* Flags: log.info('User ' + userId + ' logged in')
|
|
69
|
+
* Binary `+` expressions anywhere in the first arg.
|
|
70
|
+
*/
|
|
71
|
+
function containsStringConcat(node) {
|
|
72
|
+
if (node.type !== 'BinaryExpression')
|
|
73
|
+
return false;
|
|
74
|
+
const bin = node;
|
|
75
|
+
return (bin.operator === '+' ||
|
|
76
|
+
containsStringConcat(bin.left) ||
|
|
77
|
+
containsStringConcat(bin.right));
|
|
78
|
+
}
|
|
79
|
+
const noStringConcatMessage = {
|
|
80
|
+
meta: {
|
|
81
|
+
type: 'suggestion',
|
|
82
|
+
docs: {
|
|
83
|
+
description: 'Disallow string concatenation in log message argument',
|
|
84
|
+
recommended: true,
|
|
85
|
+
},
|
|
86
|
+
schema: [],
|
|
87
|
+
messages: {
|
|
88
|
+
noConcat: 'Log message should be a plain string event name, not a concatenated string. Put variable data in the second argument (fields).',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
create(context) {
|
|
92
|
+
return {
|
|
93
|
+
CallExpression(node) {
|
|
94
|
+
if (!isLogCall(node))
|
|
95
|
+
return;
|
|
96
|
+
const firstArg = node.arguments[0];
|
|
97
|
+
if (!firstArg)
|
|
98
|
+
return;
|
|
99
|
+
if (containsStringConcat(firstArg)) {
|
|
100
|
+
context.report({ node: firstArg, messageId: 'noConcat' });
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
// ─── Rule: event-name-format ──────────────────────────────────────────────────
|
|
107
|
+
/**
|
|
108
|
+
* Flags: log.info('File was uploaded successfully')
|
|
109
|
+
* Sentence-case strings (starts with uppercase, contains spaces) are likely
|
|
110
|
+
* free-form sentences rather than structured event names.
|
|
111
|
+
*
|
|
112
|
+
* Allowed: 'file.uploaded', 'db.slow', 'request.headers'
|
|
113
|
+
* Flagged: 'File was uploaded', 'Polling channels'
|
|
114
|
+
*/
|
|
115
|
+
const SENTENCE_CASE_RE = /^[A-Z][a-z].*\s/;
|
|
116
|
+
const eventNameFormat = {
|
|
117
|
+
meta: {
|
|
118
|
+
type: 'suggestion',
|
|
119
|
+
docs: {
|
|
120
|
+
description: 'Log message should be a dotted lowercase event name, not a sentence',
|
|
121
|
+
recommended: true,
|
|
122
|
+
},
|
|
123
|
+
schema: [],
|
|
124
|
+
messages: {
|
|
125
|
+
sentenceCase: 'Log message looks like a sentence ("{{value}}"). Prefer a dotted lowercase event name (e.g. "file.uploaded") so it is grep-friendly and structured.',
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
create(context) {
|
|
129
|
+
return {
|
|
130
|
+
CallExpression(node) {
|
|
131
|
+
if (!isLogCall(node))
|
|
132
|
+
return;
|
|
133
|
+
const firstArg = node.arguments[0];
|
|
134
|
+
if (!firstArg)
|
|
135
|
+
return;
|
|
136
|
+
if (firstArg.type === 'Literal') {
|
|
137
|
+
const value = firstArg.value;
|
|
138
|
+
if (typeof value === 'string' && SENTENCE_CASE_RE.test(value)) {
|
|
139
|
+
context.report({
|
|
140
|
+
node: firstArg,
|
|
141
|
+
messageId: 'sentenceCase',
|
|
142
|
+
data: { value: value.slice(0, 40) },
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
// ─── Plugin export ────────────────────────────────────────────────────────────
|
|
151
|
+
export const plugin = {
|
|
152
|
+
rules: {
|
|
153
|
+
'no-template-message': noTemplateMessage,
|
|
154
|
+
'no-string-concat-message': noStringConcatMessage,
|
|
155
|
+
'event-name-format': eventNameFormat,
|
|
156
|
+
},
|
|
157
|
+
configs: {
|
|
158
|
+
recommended: {
|
|
159
|
+
rules: {
|
|
160
|
+
'hazo-logs/no-template-message': 'warn',
|
|
161
|
+
'hazo-logs/no-string-concat-message': 'warn',
|
|
162
|
+
'hazo-logs/event-name-format': 'warn',
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
export default plugin;
|
|
168
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/eslint_plugin/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-error-handlers.d.ts","sourceRoot":"","sources":["../../src/lib/global-error-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"global-error-handlers.d.ts","sourceRoot":"","sources":["../../src/lib/global-error-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,yBAAyB;IACxC,2FAA2F;IAC3F,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA6BD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,yBAA8B,GAAG,IAAI,CASxF"}
|
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Call once at process startup, before any other code.
|
|
12
12
|
*/
|
|
13
|
+
import { generateRequestId } from 'hazo_core';
|
|
13
14
|
import { createLogger } from './package_logger.js';
|
|
14
15
|
const logger = createLogger('hazo_logs.globalHandlers');
|
|
15
16
|
const FLUSH_DELAY_MS = 500;
|
|
16
17
|
async function handleFatal(err, source, options) {
|
|
17
|
-
const correlationId =
|
|
18
|
+
const correlationId = generateRequestId();
|
|
18
19
|
logger.fatal(`[${source}] ${err.message}`, {
|
|
19
20
|
correlationId,
|
|
20
21
|
source,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-error-handlers.js","sourceRoot":"","sources":["../../src/lib/global-error-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,MAAM,GAAG,YAAY,CAAC,0BAA0B,CAAC,CAAC;AAExD,MAAM,cAAc,GAAG,GAAG,CAAC;AAY3B,KAAK,UAAU,WAAW,CACxB,GAAU,EACV,MAAkD,EAClD,OAAkC;IAElC,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"global-error-handlers.js","sourceRoot":"","sources":["../../src/lib/global-error-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,MAAM,GAAG,YAAY,CAAC,0BAA0B,CAAC,CAAC;AAExD,MAAM,cAAc,GAAG,GAAG,CAAC;AAY3B,KAAK,UAAU,WAAW,CACxB,GAAU,EACV,MAAkD,EAClD,OAAkC;IAElC,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAE1C,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE;QACzC,aAAa;QACb,MAAM;QACN,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,cAAc,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,UAAqC,EAAE;IAChF,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,KAAK,WAAW,CAAC,GAAG,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,KAAK,WAAW,CAAC,GAAG,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC"}
|