hazo_logs 1.0.8 → 1.0.10
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 +31 -7
- package/dist/client/index.d.ts +55 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +89 -0
- package/dist/client/index.js.map +1 -0
- package/dist/lib/context/log-context.d.ts +3 -0
- package/dist/lib/context/log-context.d.ts.map +1 -1
- package/dist/lib/context/log-context.js +38 -2
- package/dist/lib/context/log-context.js.map +1 -1
- package/dist/lib/hazo_logger.d.ts +17 -1
- package/dist/lib/hazo_logger.d.ts.map +1 -1
- package/dist/lib/hazo_logger.js +83 -11
- package/dist/lib/hazo_logger.js.map +1 -1
- package/dist/lib/package_logger.d.ts +5 -0
- package/dist/lib/package_logger.d.ts.map +1 -1
- package/dist/lib/package_logger.js +41 -5
- package/dist/lib/package_logger.js.map +1 -1
- package/package.json +13 -2
package/README.md
CHANGED
|
@@ -185,12 +185,32 @@ import { createLogApiHandler } from 'hazo_logs/ui/server';
|
|
|
185
185
|
|
|
186
186
|
**Note**: The `hazo_logs/server` and `hazo_logs/ui/server` imports use the `server-only` package and will throw an error if accidentally imported in client bundles. This prevents Next.js build errors from Node.js APIs (`fs`, `async_hooks`) being bundled for the browser.
|
|
187
187
|
|
|
188
|
+
**Next.js 16+ Turbopack Compatibility**: As of v1.0.10, hazo_logs uses **conditional exports** in `package.json` to automatically serve a client-safe bundle to browser environments. When bundlers (Next.js Turbopack, Webpack, etc.) resolve `hazo_logs`, they automatically receive:
|
|
189
|
+
- **Browser/Client**: A lightweight console-only logger with zero Node.js dependencies
|
|
190
|
+
- **Node.js/Server**: The full winston-based logger with file transports
|
|
191
|
+
|
|
192
|
+
This eliminates "Can't resolve 'fs'" errors completely without requiring any special import paths for basic logging.
|
|
193
|
+
|
|
188
194
|
### Tailwind CSS Setup Required
|
|
189
195
|
|
|
190
|
-
The log viewer UI uses dynamic Tailwind classes that would be purged during build.
|
|
196
|
+
The log viewer UI uses dynamic Tailwind classes that would be purged during build.
|
|
197
|
+
|
|
198
|
+
#### Tailwind v4 Setup
|
|
199
|
+
|
|
200
|
+
Add the `@source` directive to your `globals.css` to enable Tailwind to scan hazo_logs classes:
|
|
201
|
+
|
|
202
|
+
```css
|
|
203
|
+
@import "tailwindcss";
|
|
191
204
|
|
|
192
|
-
|
|
193
|
-
|
|
205
|
+
/* Required: Enable Tailwind to scan hazo_logs package classes */
|
|
206
|
+
@source "../node_modules/hazo_logs/dist";
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Why this is needed:** Tailwind v4's JIT compiler doesn't scan `node_modules/` by default. Without this directive, hover states and interactive styles will be invisible.
|
|
210
|
+
|
|
211
|
+
#### Tailwind v3 Setup
|
|
212
|
+
|
|
213
|
+
Configure both the content path and safelist:
|
|
194
214
|
|
|
195
215
|
```typescript
|
|
196
216
|
import { tailwindSafelist, tailwindContentPath } from 'hazo_logs/tailwind';
|
|
@@ -526,11 +546,15 @@ Error: Module not found: Can't resolve 'async_hooks'
|
|
|
526
546
|
Error: Module not found: Can't resolve 'fs'
|
|
527
547
|
```
|
|
528
548
|
|
|
529
|
-
This
|
|
549
|
+
This error occurred in earlier versions when server-only code was imported in client components. **As of v1.0.10, this is fully fixed** - the library now uses **conditional exports** in `package.json`, so bundlers automatically receive a client-safe bundle with zero Node.js dependencies.
|
|
550
|
+
|
|
551
|
+
If you still see this error:
|
|
530
552
|
|
|
531
|
-
1. **
|
|
532
|
-
2. **
|
|
533
|
-
3. **For
|
|
553
|
+
1. **Upgrade hazo_logs**: Run `npm update hazo_logs` to get v1.0.10 or later
|
|
554
|
+
2. **Clear build cache**: Run `rm -rf .next` and rebuild
|
|
555
|
+
3. **For logging in client components**: The base `hazo_logs` import now works automatically (returns console logger on client)
|
|
556
|
+
4. **For client logging that posts to server**: Use `createClientLogger` from `hazo_logs/ui`
|
|
557
|
+
5. **For full server capabilities**: Import from `hazo_logs/server` for file logging, sessions, and context
|
|
534
558
|
|
|
535
559
|
### hazo_ui missing errors
|
|
536
560
|
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hazo_logs/client - Client-safe logging module
|
|
3
|
+
*
|
|
4
|
+
* This module contains ONLY client-safe code with NO imports that could
|
|
5
|
+
* lead to Node.js modules (winston, fs, path, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Used automatically when bundlers resolve 'hazo_logs' for browser targets.
|
|
8
|
+
*/
|
|
9
|
+
import type { Logger, LogData, LogLevel } from '../lib/types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Console-based logger for client-side use
|
|
12
|
+
* Provides basic logging that outputs to browser console
|
|
13
|
+
*/
|
|
14
|
+
export declare class ConsoleLogger implements Logger {
|
|
15
|
+
private packageName;
|
|
16
|
+
private minLevel;
|
|
17
|
+
constructor(packageName: string, minLevel?: LogLevel);
|
|
18
|
+
private shouldLog;
|
|
19
|
+
private formatMessage;
|
|
20
|
+
error(message: string, data?: LogData): void;
|
|
21
|
+
warn(message: string, data?: LogData): void;
|
|
22
|
+
info(message: string, data?: LogData): void;
|
|
23
|
+
debug(message: string, data?: LogData): void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a client-side logger that outputs to browser console
|
|
27
|
+
*
|
|
28
|
+
* @param packageName - Name of the package (e.g., "hazo_auth", "my_app")
|
|
29
|
+
* @returns Logger instance that logs to console
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* import { createLogger } from 'hazo_logs';
|
|
34
|
+
*
|
|
35
|
+
* const logger = createLogger('my_app');
|
|
36
|
+
* logger.info('Application started');
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* Note: For full server capabilities (file logging, context), use:
|
|
40
|
+
* ```typescript
|
|
41
|
+
* import { createLogger } from 'hazo_logs/server';
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function createLogger(packageName: string): Logger;
|
|
45
|
+
/**
|
|
46
|
+
* Async version - same as createLogger on client
|
|
47
|
+
* Provided for API compatibility with server version
|
|
48
|
+
*/
|
|
49
|
+
export declare function createLoggerAsync(packageName: string): Promise<Logger>;
|
|
50
|
+
/**
|
|
51
|
+
* No-op on client - server preloading not applicable
|
|
52
|
+
*/
|
|
53
|
+
export declare function preloadServerLogger(): Promise<void>;
|
|
54
|
+
export type { Logger, LogLevel, LogData, LogEntry, LogContext, HazoLogConfig, PackageLoggerOptions, LogSource, } from '../lib/types.js';
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AASjE;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAW;gBAEf,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAkB;IAK7D,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,aAAa;IAKrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAM5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAM3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAM3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;CAK7C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEzD;AAGD,YAAY,EACV,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,SAAS,GACV,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hazo_logs/client - Client-safe logging module
|
|
3
|
+
*
|
|
4
|
+
* This module contains ONLY client-safe code with NO imports that could
|
|
5
|
+
* lead to Node.js modules (winston, fs, path, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Used automatically when bundlers resolve 'hazo_logs' for browser targets.
|
|
8
|
+
*/
|
|
9
|
+
const LOG_LEVEL_PRIORITY = {
|
|
10
|
+
error: 0,
|
|
11
|
+
warn: 1,
|
|
12
|
+
info: 2,
|
|
13
|
+
debug: 3,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Console-based logger for client-side use
|
|
17
|
+
* Provides basic logging that outputs to browser console
|
|
18
|
+
*/
|
|
19
|
+
export class ConsoleLogger {
|
|
20
|
+
packageName;
|
|
21
|
+
minLevel;
|
|
22
|
+
constructor(packageName, minLevel = 'debug') {
|
|
23
|
+
this.packageName = packageName;
|
|
24
|
+
this.minLevel = minLevel;
|
|
25
|
+
}
|
|
26
|
+
shouldLog(level) {
|
|
27
|
+
return LOG_LEVEL_PRIORITY[level] <= LOG_LEVEL_PRIORITY[this.minLevel];
|
|
28
|
+
}
|
|
29
|
+
formatMessage(level, message) {
|
|
30
|
+
const timestamp = new Date().toISOString();
|
|
31
|
+
return `[${timestamp}] [${level.toUpperCase()}] [${this.packageName}] ${message}`;
|
|
32
|
+
}
|
|
33
|
+
error(message, data) {
|
|
34
|
+
if (this.shouldLog('error')) {
|
|
35
|
+
console.error(this.formatMessage('error', message), data ?? '');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
warn(message, data) {
|
|
39
|
+
if (this.shouldLog('warn')) {
|
|
40
|
+
console.warn(this.formatMessage('warn', message), data ?? '');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
info(message, data) {
|
|
44
|
+
if (this.shouldLog('info')) {
|
|
45
|
+
console.info(this.formatMessage('info', message), data ?? '');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
debug(message, data) {
|
|
49
|
+
if (this.shouldLog('debug')) {
|
|
50
|
+
console.debug(this.formatMessage('debug', message), data ?? '');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a client-side logger that outputs to browser console
|
|
56
|
+
*
|
|
57
|
+
* @param packageName - Name of the package (e.g., "hazo_auth", "my_app")
|
|
58
|
+
* @returns Logger instance that logs to console
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* import { createLogger } from 'hazo_logs';
|
|
63
|
+
*
|
|
64
|
+
* const logger = createLogger('my_app');
|
|
65
|
+
* logger.info('Application started');
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* Note: For full server capabilities (file logging, context), use:
|
|
69
|
+
* ```typescript
|
|
70
|
+
* import { createLogger } from 'hazo_logs/server';
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function createLogger(packageName) {
|
|
74
|
+
return new ConsoleLogger(packageName);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Async version - same as createLogger on client
|
|
78
|
+
* Provided for API compatibility with server version
|
|
79
|
+
*/
|
|
80
|
+
export async function createLoggerAsync(packageName) {
|
|
81
|
+
return new ConsoleLogger(packageName);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* No-op on client - server preloading not applicable
|
|
85
|
+
*/
|
|
86
|
+
export async function preloadServerLogger() {
|
|
87
|
+
// No-op on client
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,kBAAkB,GAA6B;IACnD,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,aAAa;IAChB,WAAW,CAAS;IACpB,QAAQ,CAAW;IAE3B,YAAY,WAAmB,EAAE,WAAqB,OAAO;QAC3D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC;IAEO,aAAa,CAAC,KAAe,EAAE,OAAe;QACpD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,OAAO,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,kBAAkB;AACpB,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Log Context Provider
|
|
3
3
|
* Uses AsyncLocalStorage for zero-overhead context propagation
|
|
4
|
+
*
|
|
5
|
+
* This module is safe for both server and client environments.
|
|
6
|
+
* On the client, context functions are no-ops since AsyncLocalStorage is unavailable.
|
|
4
7
|
*/
|
|
5
8
|
import type { LogContext, Logger } from '../types.js';
|
|
6
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-context.d.ts","sourceRoot":"","sources":["../../../src/lib/context/log-context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"log-context.d.ts","sourceRoot":"","sources":["../../../src/lib/context/log-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAwCtD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAChD,EAAE,EAAE,MAAM,CAAC,GACV,CAAC,CAeH;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAChD,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAeZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAcxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,UAAU,EACnB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,GAAG,SAAS,CAGtD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEhE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEnF"}
|
|
@@ -1,9 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Log Context Provider
|
|
3
3
|
* Uses AsyncLocalStorage for zero-overhead context propagation
|
|
4
|
+
*
|
|
5
|
+
* This module is safe for both server and client environments.
|
|
6
|
+
* On the client, context functions are no-ops since AsyncLocalStorage is unavailable.
|
|
7
|
+
*/
|
|
8
|
+
// Client-side stub implementation
|
|
9
|
+
const clientStubStorage = {
|
|
10
|
+
getStore: () => undefined,
|
|
11
|
+
run: (_store, fn) => fn(),
|
|
12
|
+
};
|
|
13
|
+
// Runtime-initialized storage (populated on server, stub on client)
|
|
14
|
+
let logContextStorage = clientStubStorage;
|
|
15
|
+
let initialized = false;
|
|
16
|
+
/**
|
|
17
|
+
* Initialize AsyncLocalStorage on the server
|
|
18
|
+
* This is called lazily when context functions are first used
|
|
4
19
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
20
|
+
function ensureInitialized() {
|
|
21
|
+
if (initialized)
|
|
22
|
+
return;
|
|
23
|
+
initialized = true;
|
|
24
|
+
// Only attempt to load async_hooks on the server
|
|
25
|
+
if (typeof window === 'undefined') {
|
|
26
|
+
try {
|
|
27
|
+
// Dynamic require to avoid static analysis by bundlers
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
29
|
+
const asyncHooks = require('async_hooks');
|
|
30
|
+
logContextStorage = new asyncHooks.AsyncLocalStorage();
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// If async_hooks is not available, keep using the stub
|
|
34
|
+
console.warn('[hazo_logs] AsyncLocalStorage not available, context tracking disabled');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
7
38
|
/**
|
|
8
39
|
* Generate a human-readable session ID
|
|
9
40
|
* Format: 2025-12-17-14:30:45-1234 (date-time-4digit)
|
|
@@ -26,6 +57,7 @@ export function generateSessionId() {
|
|
|
26
57
|
* });
|
|
27
58
|
*/
|
|
28
59
|
export function startSession(options, fn) {
|
|
60
|
+
ensureInitialized();
|
|
29
61
|
const sessionId = generateSessionId();
|
|
30
62
|
return logContextStorage.run({ sessionId, reference: options.reference, depth: 1 }, () => {
|
|
31
63
|
// Auto-log session start if logger provided
|
|
@@ -49,6 +81,7 @@ export function startSession(options, fn) {
|
|
|
49
81
|
* });
|
|
50
82
|
*/
|
|
51
83
|
export async function startSessionAsync(options, fn) {
|
|
84
|
+
ensureInitialized();
|
|
52
85
|
const sessionId = generateSessionId();
|
|
53
86
|
return logContextStorage.run({ sessionId, reference: options.reference, depth: 1 }, async () => {
|
|
54
87
|
// Auto-log session start if logger provided
|
|
@@ -73,6 +106,7 @@ export async function startSessionAsync(options, fn) {
|
|
|
73
106
|
* });
|
|
74
107
|
*/
|
|
75
108
|
export function runWithLogContext(context, fn) {
|
|
109
|
+
ensureInitialized();
|
|
76
110
|
const parentContext = logContextStorage.getStore();
|
|
77
111
|
const parentDepth = parentContext?.depth ?? 0;
|
|
78
112
|
const newContext = {
|
|
@@ -95,6 +129,7 @@ export function runWithLogContext(context, fn) {
|
|
|
95
129
|
* });
|
|
96
130
|
*/
|
|
97
131
|
export function runWithLogContextAsync(context, fn) {
|
|
132
|
+
ensureInitialized();
|
|
98
133
|
const parentContext = logContextStorage.getStore();
|
|
99
134
|
const parentDepth = parentContext?.depth ?? 0;
|
|
100
135
|
const newContext = {
|
|
@@ -109,6 +144,7 @@ export function runWithLogContextAsync(context, fn) {
|
|
|
109
144
|
* Returns undefined if not within a context
|
|
110
145
|
*/
|
|
111
146
|
export function getLogContext() {
|
|
147
|
+
ensureInitialized();
|
|
112
148
|
return logContextStorage.getStore();
|
|
113
149
|
}
|
|
114
150
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-context.js","sourceRoot":"","sources":["../../../src/lib/context/log-context.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"log-context.js","sourceRoot":"","sources":["../../../src/lib/context/log-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,kCAAkC;AAClC,MAAM,iBAAiB,GAAsB;IAC3C,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;IACzB,GAAG,EAAE,CAAI,MAAkB,EAAE,EAAW,EAAK,EAAE,CAAC,EAAE,EAAE;CACrD,CAAC;AAEF,oEAAoE;AACpE,IAAI,iBAAiB,GAAsB,iBAAiB,CAAC;AAC7D,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB;;;GAGG;AACH,SAAS,iBAAiB;IACxB,IAAI,WAAW;QAAE,OAAO;IACxB,WAAW,GAAG,IAAI,CAAC;IAEnB,iDAAiD;IACjD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,uDAAuD;YACvD,iEAAiE;YACjE,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAiC,CAAC;YAC1E,iBAAiB,GAAG,IAAI,UAAU,CAAC,iBAAiB,EAAc,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;YACvD,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;IAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,qBAAqB;IAC5F,OAAO,GAAG,QAAQ,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgD,EAChD,EAAW;IAEX,iBAAiB,EAAE,CAAC;IACpB,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IAEtC,OAAO,iBAAiB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE;QACvF,4CAA4C;QAC5C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACrC,SAAS;gBACT,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAgD,EAChD,EAAoB;IAEpB,iBAAiB,EAAE,CAAC;IACpB,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IAEtC,OAAO,iBAAiB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAC7F,4CAA4C;QAC5C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACrC,SAAS;gBACT,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAI,OAAmB,EAAE,EAAW;IACnE,iBAAiB,EAAE,CAAC;IACpB,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,WAAW,GAAG,aAAa,EAAE,KAAK,IAAI,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAe;QAC7B,6CAA6C;QAC7C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,SAAS;QACxD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,SAAS;QACxD,uBAAuB;QACvB,KAAK,EAAE,WAAW,GAAG,CAAC;KACvB,CAAC;IAEF,OAAO,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAmB,EACnB,EAAoB;IAEpB,iBAAiB,EAAE,CAAC;IACpB,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,WAAW,GAAG,aAAa,EAAE,KAAK,IAAI,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAe;QAC7B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,SAAS;QACxD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,SAAS;QACxD,KAAK,EAAE,WAAW,GAAG,CAAC;KACvB,CAAC;IAEF,OAAO,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,iBAAiB,EAAE,CAAC;IACpB,OAAO,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAI,SAAiB,EAAE,EAAW;IAC3D,OAAO,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAI,SAAiB,EAAE,SAAiB,EAAE,EAAW;IAC9E,OAAO,iBAAiB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Core singleton logger for hazo_logs
|
|
3
3
|
* Manages the Winston logger instance and transports
|
|
4
|
+
*
|
|
5
|
+
* This module is server-only. All imports are lazy-loaded to prevent
|
|
6
|
+
* bundlers from including server-only dependencies in client bundles.
|
|
4
7
|
*/
|
|
5
8
|
import type { HazoLogConfig, LogEntry } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Load server-only dependencies asynchronously
|
|
11
|
+
* Uses dynamic import to avoid static analysis by bundlers
|
|
12
|
+
*/
|
|
13
|
+
declare function loadDependencies(): Promise<void>;
|
|
6
14
|
export declare class HazoLogger {
|
|
7
15
|
private static instance;
|
|
16
|
+
private static instancePromise;
|
|
8
17
|
private winstonLogger;
|
|
9
18
|
private config;
|
|
10
19
|
private executionId;
|
|
@@ -15,7 +24,13 @@ export declare class HazoLogger {
|
|
|
15
24
|
*/
|
|
16
25
|
private generateExecutionId;
|
|
17
26
|
/**
|
|
18
|
-
* Get the singleton instance of HazoLogger
|
|
27
|
+
* Get the singleton instance of HazoLogger (async)
|
|
28
|
+
* @param configPath - Optional path to config file (only used on first call)
|
|
29
|
+
*/
|
|
30
|
+
static getInstanceAsync(configPath?: string): Promise<HazoLogger>;
|
|
31
|
+
/**
|
|
32
|
+
* Get the singleton instance of HazoLogger (synchronous)
|
|
33
|
+
* Only works if dependencies have already been loaded via getInstanceAsync
|
|
19
34
|
* @param configPath - Optional path to config file (only used on first call)
|
|
20
35
|
*/
|
|
21
36
|
static getInstance(configPath?: string): HazoLogger;
|
|
@@ -42,4 +57,5 @@ export declare class HazoLogger {
|
|
|
42
57
|
getExecutionId(): string;
|
|
43
58
|
private createWinstonLogger;
|
|
44
59
|
}
|
|
60
|
+
export { loadDependencies as preloadHazoLogger };
|
|
45
61
|
//# sourceMappingURL=hazo_logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_logger.d.ts","sourceRoot":"","sources":["../../src/lib/hazo_logger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hazo_logger.d.ts","sourceRoot":"","sources":["../../src/lib/hazo_logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAY,MAAM,YAAY,CAAC;AAUpE;;;GAGG;AACH,iBAAe,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyB/C;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2B;IAClD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAoC;IAClE,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO;IASP;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;;OAGG;WACiB,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAkB9E;;;;OAIG;WACW,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU;IAgB1D;;OAEG;WACW,KAAK,IAAI,IAAI;IAQ3B;;OAEG;IACI,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAMjC;;;OAGG;IACI,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC,GAAG,IAAI;IAalF;;OAEG;IACI,SAAS,IAAI,aAAa;IAIjC;;OAEG;IACI,cAAc,IAAI,MAAM;IAI/B,OAAO,CAAC,mBAAmB;CAoB5B;AAGD,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,CAAC"}
|
package/dist/lib/hazo_logger.js
CHANGED
|
@@ -1,19 +1,57 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Core singleton logger for hazo_logs
|
|
3
3
|
* Manages the Winston logger instance and transports
|
|
4
|
+
*
|
|
5
|
+
* This module is server-only. All imports are lazy-loaded to prevent
|
|
6
|
+
* bundlers from including server-only dependencies in client bundles.
|
|
4
7
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
// Lazy-loaded dependencies (populated on first getInstance call)
|
|
9
|
+
let winston = null;
|
|
10
|
+
let loadConfigFn = null;
|
|
11
|
+
let createConsoleTransportFn = null;
|
|
12
|
+
let createFileTransportFn = null;
|
|
13
|
+
let dependenciesLoaded = false;
|
|
14
|
+
let loadPromise = null;
|
|
15
|
+
/**
|
|
16
|
+
* Load server-only dependencies asynchronously
|
|
17
|
+
* Uses dynamic import to avoid static analysis by bundlers
|
|
18
|
+
*/
|
|
19
|
+
async function loadDependencies() {
|
|
20
|
+
if (dependenciesLoaded)
|
|
21
|
+
return;
|
|
22
|
+
if (loadPromise)
|
|
23
|
+
return loadPromise;
|
|
24
|
+
// Only load on server
|
|
25
|
+
if (typeof window !== 'undefined') {
|
|
26
|
+
throw new Error('[hazo_logs] HazoLogger cannot be used on the client. Use createLogger from hazo_logs (universal) or createClientLogger from hazo_logs/ui instead.');
|
|
27
|
+
}
|
|
28
|
+
loadPromise = (async () => {
|
|
29
|
+
const [winstonMod, configMod, consoleMod, fileMod] = await Promise.all([
|
|
30
|
+
import('winston'),
|
|
31
|
+
import('./config_loader.js'),
|
|
32
|
+
import('./transports/console_transport.js'),
|
|
33
|
+
import('./transports/file_transport.js'),
|
|
34
|
+
]);
|
|
35
|
+
winston = winstonMod.default;
|
|
36
|
+
loadConfigFn = configMod.loadConfig;
|
|
37
|
+
createConsoleTransportFn = consoleMod.createConsoleTransport;
|
|
38
|
+
createFileTransportFn = fileMod.createFileTransport;
|
|
39
|
+
dependenciesLoaded = true;
|
|
40
|
+
})();
|
|
41
|
+
return loadPromise;
|
|
42
|
+
}
|
|
9
43
|
export class HazoLogger {
|
|
10
44
|
static instance = null;
|
|
45
|
+
static instancePromise = null;
|
|
11
46
|
winstonLogger;
|
|
12
47
|
config;
|
|
13
48
|
executionId;
|
|
14
49
|
constructor(configPath) {
|
|
50
|
+
if (!dependenciesLoaded || !loadConfigFn) {
|
|
51
|
+
throw new Error('[hazo_logs] Dependencies not loaded. Use HazoLogger.getInstanceAsync() instead.');
|
|
52
|
+
}
|
|
15
53
|
this.executionId = this.generateExecutionId();
|
|
16
|
-
this.config =
|
|
54
|
+
this.config = loadConfigFn(configPath);
|
|
17
55
|
this.winstonLogger = this.createWinstonLogger();
|
|
18
56
|
}
|
|
19
57
|
/**
|
|
@@ -28,13 +66,37 @@ export class HazoLogger {
|
|
|
28
66
|
return `${datePart}-${timePart}-${randomPart}`;
|
|
29
67
|
}
|
|
30
68
|
/**
|
|
31
|
-
* Get the singleton instance of HazoLogger
|
|
69
|
+
* Get the singleton instance of HazoLogger (async)
|
|
32
70
|
* @param configPath - Optional path to config file (only used on first call)
|
|
33
71
|
*/
|
|
34
|
-
static
|
|
35
|
-
if (
|
|
72
|
+
static async getInstanceAsync(configPath) {
|
|
73
|
+
if (HazoLogger.instance) {
|
|
74
|
+
return HazoLogger.instance;
|
|
75
|
+
}
|
|
76
|
+
if (HazoLogger.instancePromise) {
|
|
77
|
+
return HazoLogger.instancePromise;
|
|
78
|
+
}
|
|
79
|
+
HazoLogger.instancePromise = (async () => {
|
|
80
|
+
await loadDependencies();
|
|
36
81
|
HazoLogger.instance = new HazoLogger(configPath);
|
|
82
|
+
return HazoLogger.instance;
|
|
83
|
+
})();
|
|
84
|
+
return HazoLogger.instancePromise;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get the singleton instance of HazoLogger (synchronous)
|
|
88
|
+
* Only works if dependencies have already been loaded via getInstanceAsync
|
|
89
|
+
* @param configPath - Optional path to config file (only used on first call)
|
|
90
|
+
*/
|
|
91
|
+
static getInstance(configPath) {
|
|
92
|
+
if (HazoLogger.instance) {
|
|
93
|
+
return HazoLogger.instance;
|
|
37
94
|
}
|
|
95
|
+
if (!dependenciesLoaded) {
|
|
96
|
+
throw new Error('[hazo_logs] HazoLogger.getInstance() requires dependencies to be pre-loaded. ' +
|
|
97
|
+
'Use HazoLogger.getInstanceAsync() instead, or call loadDependencies() first.');
|
|
98
|
+
}
|
|
99
|
+
HazoLogger.instance = new HazoLogger(configPath);
|
|
38
100
|
return HazoLogger.instance;
|
|
39
101
|
}
|
|
40
102
|
/**
|
|
@@ -42,14 +104,17 @@ export class HazoLogger {
|
|
|
42
104
|
*/
|
|
43
105
|
static reset() {
|
|
44
106
|
if (HazoLogger.instance) {
|
|
45
|
-
HazoLogger.instance.winstonLogger
|
|
107
|
+
HazoLogger.instance.winstonLogger?.close();
|
|
46
108
|
HazoLogger.instance = null;
|
|
109
|
+
HazoLogger.instancePromise = null;
|
|
47
110
|
}
|
|
48
111
|
}
|
|
49
112
|
/**
|
|
50
113
|
* Log an entry - called by PackageLogger
|
|
51
114
|
*/
|
|
52
115
|
log(entry) {
|
|
116
|
+
if (!this.winstonLogger)
|
|
117
|
+
return;
|
|
53
118
|
const { level, message, ...meta } = entry;
|
|
54
119
|
this.winstonLogger.log(level, message, meta);
|
|
55
120
|
}
|
|
@@ -58,6 +123,8 @@ export class HazoLogger {
|
|
|
58
123
|
* Used for logs sent from the browser
|
|
59
124
|
*/
|
|
60
125
|
logClient(entry) {
|
|
126
|
+
if (!this.winstonLogger)
|
|
127
|
+
return;
|
|
61
128
|
const fullEntry = {
|
|
62
129
|
...entry,
|
|
63
130
|
executionId: this.executionId,
|
|
@@ -81,12 +148,15 @@ export class HazoLogger {
|
|
|
81
148
|
return this.executionId;
|
|
82
149
|
}
|
|
83
150
|
createWinstonLogger() {
|
|
151
|
+
if (!winston || !createConsoleTransportFn || !createFileTransportFn) {
|
|
152
|
+
throw new Error('[hazo_logs] Dependencies not loaded');
|
|
153
|
+
}
|
|
84
154
|
const transports = [];
|
|
85
155
|
if (this.config.enable_console) {
|
|
86
|
-
transports.push(
|
|
156
|
+
transports.push(createConsoleTransportFn(this.config.log_level));
|
|
87
157
|
}
|
|
88
158
|
if (this.config.enable_file) {
|
|
89
|
-
transports.push(
|
|
159
|
+
transports.push(createFileTransportFn(this.config));
|
|
90
160
|
}
|
|
91
161
|
return winston.createLogger({
|
|
92
162
|
level: this.config.log_level,
|
|
@@ -94,4 +164,6 @@ export class HazoLogger {
|
|
|
94
164
|
});
|
|
95
165
|
}
|
|
96
166
|
}
|
|
167
|
+
// Export the async loader for pre-initialization
|
|
168
|
+
export { loadDependencies as preloadHazoLogger };
|
|
97
169
|
//# sourceMappingURL=hazo_logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_logger.js","sourceRoot":"","sources":["../../src/lib/hazo_logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"hazo_logger.js","sourceRoot":"","sources":["../../src/lib/hazo_logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,13 @@ import type { Logger, LogData, PackageLoggerOptions } from './types.js';
|
|
|
10
10
|
*/
|
|
11
11
|
export declare class PackageLogger implements Logger {
|
|
12
12
|
private coreLogger;
|
|
13
|
+
private coreLoggerPromise;
|
|
13
14
|
private packageName;
|
|
14
15
|
constructor(options: PackageLoggerOptions, coreLogger?: HazoLogger);
|
|
16
|
+
/**
|
|
17
|
+
* Get the core logger, waiting if necessary
|
|
18
|
+
*/
|
|
19
|
+
private getCoreLogger;
|
|
15
20
|
private log;
|
|
16
21
|
error(message: string, data?: LogData): void;
|
|
17
22
|
warn(message: string, data?: LogData): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package_logger.d.ts","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAY,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIlF;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"package_logger.d.ts","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAY,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIlF;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,iBAAiB,CAAoC;IAC7D,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,oBAAoB,EAAE,UAAU,CAAC,EAAE,UAAU;IAalE;;OAEG;YACW,aAAa;IAQ3B,OAAO,CAAC,GAAG;IAkCX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;CAG7C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD"}
|
|
@@ -10,28 +10,64 @@ import { getLogContext } from './context/log-context.js';
|
|
|
10
10
|
* Tags all log entries with the package name and captures caller info
|
|
11
11
|
*/
|
|
12
12
|
export class PackageLogger {
|
|
13
|
-
coreLogger;
|
|
13
|
+
coreLogger = null;
|
|
14
|
+
coreLoggerPromise = null;
|
|
14
15
|
packageName;
|
|
15
16
|
constructor(options, coreLogger) {
|
|
16
17
|
this.packageName = options.packageName;
|
|
17
|
-
|
|
18
|
+
if (coreLogger) {
|
|
19
|
+
this.coreLogger = coreLogger;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
// Start async loading of the core logger
|
|
23
|
+
this.coreLoggerPromise = HazoLogger.getInstanceAsync().then((logger) => {
|
|
24
|
+
this.coreLogger = logger;
|
|
25
|
+
return logger;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get the core logger, waiting if necessary
|
|
31
|
+
*/
|
|
32
|
+
async getCoreLogger() {
|
|
33
|
+
if (this.coreLogger)
|
|
34
|
+
return this.coreLogger;
|
|
35
|
+
if (this.coreLoggerPromise) {
|
|
36
|
+
return this.coreLoggerPromise;
|
|
37
|
+
}
|
|
38
|
+
throw new Error('[hazo_logs] Core logger not initialized');
|
|
18
39
|
}
|
|
19
40
|
log(level, message, data) {
|
|
20
41
|
const { filename, line } = getCallerInfo();
|
|
21
42
|
const context = getLogContext();
|
|
22
|
-
|
|
43
|
+
const logEntry = {
|
|
23
44
|
timestamp: new Date().toISOString(),
|
|
24
45
|
level,
|
|
25
46
|
package: this.packageName,
|
|
26
47
|
message,
|
|
27
48
|
filename,
|
|
28
49
|
line,
|
|
29
|
-
executionId:
|
|
50
|
+
executionId: '', // Will be set when core logger is available
|
|
30
51
|
...(context?.sessionId ? { sessionId: context.sessionId } : {}),
|
|
31
52
|
...(context?.reference ? { reference: context.reference } : {}),
|
|
32
53
|
...(context?.depth ? { depth: context.depth } : {}),
|
|
33
54
|
...(data ? { data } : {}),
|
|
34
|
-
}
|
|
55
|
+
};
|
|
56
|
+
if (this.coreLogger) {
|
|
57
|
+
// Core logger is ready, log immediately
|
|
58
|
+
logEntry.executionId = this.coreLogger.getExecutionId();
|
|
59
|
+
this.coreLogger.log(logEntry);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Core logger is still initializing, queue the log
|
|
63
|
+
this.getCoreLogger().then((logger) => {
|
|
64
|
+
logEntry.executionId = logger.getExecutionId();
|
|
65
|
+
logger.log(logEntry);
|
|
66
|
+
}).catch(() => {
|
|
67
|
+
// Fallback to console if core logger fails to initialize
|
|
68
|
+
console.error(`[${this.packageName}] ${message}`, data);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
35
71
|
}
|
|
36
72
|
error(message, data) {
|
|
37
73
|
this.log('error', message, data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package_logger.js","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,aAAa;IAChB,UAAU,
|
|
1
|
+
{"version":3,"file":"package_logger.js","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hazo_logs",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "Logger for hazo packages - Winston wrapper with singleton pattern",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -8,14 +8,22 @@
|
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
|
+
"browser": "./dist/client/index.js",
|
|
12
|
+
"node": "./dist/index.js",
|
|
11
13
|
"import": "./dist/index.js",
|
|
12
|
-
"require": "./dist/index.js"
|
|
14
|
+
"require": "./dist/index.js",
|
|
15
|
+
"default": "./dist/client/index.js"
|
|
13
16
|
},
|
|
14
17
|
"./server": {
|
|
15
18
|
"types": "./dist/server.d.ts",
|
|
16
19
|
"import": "./dist/server.js",
|
|
17
20
|
"require": "./dist/server.js"
|
|
18
21
|
},
|
|
22
|
+
"./client": {
|
|
23
|
+
"types": "./dist/client/index.d.ts",
|
|
24
|
+
"import": "./dist/client/index.js",
|
|
25
|
+
"require": "./dist/client/index.js"
|
|
26
|
+
},
|
|
19
27
|
"./ui": {
|
|
20
28
|
"types": "./dist/ui/index.d.ts",
|
|
21
29
|
"import": "./dist/ui/index.js",
|
|
@@ -56,6 +64,9 @@
|
|
|
56
64
|
],
|
|
57
65
|
"author": "Pubs Abayasiri",
|
|
58
66
|
"license": "MIT",
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": ">=18.0.0"
|
|
69
|
+
},
|
|
59
70
|
"bugs": {
|
|
60
71
|
"url": "https://github.com/pub12/hazo_logs/issues"
|
|
61
72
|
},
|