@octaviaflow/logger 1.0.1 → 1.1.1

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 CHANGED
@@ -26,24 +26,24 @@ bun add @octaviaflow/logger
26
26
  ### Backend Service
27
27
 
28
28
  ```typescript
29
- import { createBackendLogger } from '@octaviaflow/logger/presets';
29
+ import { createBackendLogger } from "@octaviaflow/logger/presets";
30
30
 
31
31
  const logger = createBackendLogger({
32
- level: 'info',
33
- version: '1.0.0',
32
+ level: "info",
33
+ version: "1.0.0",
34
34
  });
35
35
 
36
- logger.info('Server started', { port: 3000 });
36
+ logger.info("Server started", { port: 3000 });
37
37
 
38
38
  // Request logging
39
39
  logger.startRequest({
40
- requestId: 'req_123',
41
- method: 'GET',
42
- path: '/api/workflows',
43
- ip: '127.0.0.1',
44
- protocol: 'http',
45
- hostname: 'localhost',
46
- url: 'http://localhost:3000/api/workflows',
40
+ requestId: "req_123",
41
+ method: "GET",
42
+ path: "/api/workflows",
43
+ ip: "127.0.0.1",
44
+ protocol: "http",
45
+ hostname: "localhost",
46
+ url: "http://localhost:3000/api/workflows",
47
47
  });
48
48
 
49
49
  // ... handle request ...
@@ -54,22 +54,22 @@ logger.endRequest(200, 145);
54
54
  ### Engine Service
55
55
 
56
56
  ```typescript
57
- import { createEngineLogger } from '@octaviaflow/logger/presets';
57
+ import { createEngineLogger } from "@octaviaflow/logger/presets";
58
58
 
59
59
  const logger = createEngineLogger({
60
- level: 'info',
61
- version: '1.0.0',
62
- workerId: 'worker_1',
60
+ level: "info",
61
+ version: "1.0.0",
62
+ workerId: "worker_1",
63
63
  });
64
64
 
65
65
  // Workflow logging
66
66
  logger.startWorkflow({
67
- workflowId: 'wf_123',
68
- workflowName: 'Data Sync',
69
- executionId: 'exec_456',
67
+ workflowId: "wf_123",
68
+ workflowName: "Data Sync",
69
+ executionId: "exec_456",
70
70
  });
71
71
 
72
- logger.info('Processing workflow step');
72
+ logger.info("Processing workflow step");
73
73
 
74
74
  logger.endWorkflow(true);
75
75
  ```
@@ -77,18 +77,18 @@ logger.endWorkflow(true);
77
77
  ### UI Service
78
78
 
79
79
  ```typescript
80
- import { createUILogger } from '@octaviaflow/logger/presets';
80
+ import { createUILogger } from "@octaviaflow/logger/presets";
81
81
 
82
82
  const logger = createUILogger({
83
- level: 'warn',
84
- version: '1.0.0',
83
+ level: "warn",
84
+ version: "1.0.0",
85
85
  enableRemote: true,
86
- remoteUrl: 'https://api.example.com/logs',
86
+ remoteUrl: "https://api.example.com/logs",
87
87
  });
88
88
 
89
- logger.info('User action', {
90
- action: 'button_click',
91
- component: 'WorkflowBuilder',
89
+ logger.info("User action", {
90
+ action: "button_click",
91
+ component: "WorkflowBuilder",
92
92
  });
93
93
  ```
94
94
 
@@ -97,38 +97,38 @@ logger.info('User action', {
97
97
  ### Basic Logging
98
98
 
99
99
  ```typescript
100
- logger.fatal('Fatal error');
101
- logger.error('Error occurred');
102
- logger.warn('Warning message');
103
- logger.info('Info message');
104
- logger.debug('Debug information');
105
- logger.trace('Trace details');
100
+ logger.fatal("Fatal error");
101
+ logger.error("Error occurred");
102
+ logger.warn("Warning message");
103
+ logger.info("Info message");
104
+ logger.debug("Debug information");
105
+ logger.trace("Trace details");
106
106
  ```
107
107
 
108
108
  ### Specialized Logging
109
109
 
110
110
  ```typescript
111
111
  // Audit logging
112
- logger.audit('user.login', {
113
- actor: { id: 'user_123', type: 'user' },
114
- resource: { type: 'session', id: 'session_456' },
115
- result: 'success',
112
+ logger.audit("user.login", {
113
+ actor: { id: "user_123", type: "user" },
114
+ resource: { type: "session", id: "session_456" },
115
+ result: "success",
116
116
  });
117
117
 
118
118
  // Security logging
119
- logger.security('auth_failure', {
120
- event: 'auth_failure',
121
- severity: 'high',
122
- action: 'blocked',
119
+ logger.security("auth_failure", {
120
+ event: "auth_failure",
121
+ severity: "high",
122
+ action: "blocked",
123
123
  });
124
124
 
125
125
  // Performance logging
126
- logger.performance('api.request', 145, {
126
+ logger.performance("api.request", 145, {
127
127
  metrics: { dbQueries: 3, cacheHits: 5 },
128
128
  });
129
129
 
130
130
  // Metrics
131
- logger.metric('api.requests.total', 100);
131
+ logger.metric("api.requests.total", 100);
132
132
  ```
133
133
 
134
134
  ### Context Management
@@ -136,13 +136,13 @@ logger.metric('api.requests.total', 100);
136
136
  ```typescript
137
137
  // Set context for current async scope
138
138
  logger.setContext({
139
- user: { userId: 'user_123', organizationId: 'org_456' },
139
+ user: { userId: "user_123", organizationId: "org_456" },
140
140
  });
141
141
 
142
142
  // Create child logger with additional context
143
143
  const apiLogger = logger.child({
144
- component: 'api',
145
- endpoint: '/api/workflows',
144
+ component: "api",
145
+ endpoint: "/api/workflows",
146
146
  });
147
147
 
148
148
  // Clear context
@@ -153,15 +153,15 @@ logger.clearContext();
153
153
 
154
154
  ```typescript
155
155
  // Profile operations
156
- logger.profile('operation_1');
156
+ logger.profile("operation_1");
157
157
  // ... do work ...
158
- logger.profile('operation_1'); // Logs duration
158
+ logger.profile("operation_1"); // Logs duration
159
159
 
160
160
  // Start timer
161
161
  const getElapsed = logger.startTimer();
162
162
  // ... do work ...
163
163
  const duration = getElapsed();
164
- logger.info('Operation completed', { duration });
164
+ logger.info("Operation completed", { duration });
165
165
 
166
166
  // Flush and close
167
167
  await logger.flush();
@@ -173,39 +173,39 @@ await logger.close();
173
173
  ### Custom Logger
174
174
 
175
175
  ```typescript
176
- import { Logger } from '@octaviaflow/logger';
176
+ import { Logger } from "@octaviaflow/logger";
177
177
 
178
178
  const logger = new Logger({
179
- service: 'backend',
180
- environment: 'production',
181
- version: '1.0.0',
182
- level: 'info',
183
- format: 'json',
179
+ service: "backend",
180
+ environment: "production",
181
+ version: "1.0.0",
182
+ level: "info",
183
+ format: "json",
184
184
  transports: [
185
185
  {
186
- type: 'console',
186
+ type: "console",
187
187
  enabled: true,
188
- level: 'info',
189
- format: 'pretty',
188
+ level: "info",
189
+ format: "pretty",
190
190
  },
191
191
  {
192
- type: 'file',
192
+ type: "file",
193
193
  enabled: true,
194
- level: 'info',
194
+ level: "info",
195
195
  file: {
196
- path: './logs/app.log',
197
- maxSize: '10m',
196
+ path: "./logs/app.log",
197
+ maxSize: "10m",
198
198
  maxFiles: 10,
199
199
  compress: true,
200
- datePattern: 'YYYY-MM-DD',
200
+ datePattern: "YYYY-MM-DD",
201
201
  },
202
202
  },
203
203
  {
204
- type: 'http',
204
+ type: "http",
205
205
  enabled: true,
206
- level: 'error',
206
+ level: "error",
207
207
  http: {
208
- url: 'https://api.example.com/logs',
208
+ url: "https://api.example.com/logs",
209
209
  batchSize: 10,
210
210
  flushInterval: 5000,
211
211
  retry: { attempts: 3, delay: 1000 },
@@ -214,7 +214,7 @@ const logger = new Logger({
214
214
  ],
215
215
  sanitize: {
216
216
  enabled: true,
217
- fields: ['password', 'token', 'apiKey'],
217
+ fields: ["password", "token", "apiKey"],
218
218
  },
219
219
  handleExceptions: true,
220
220
  handleRejections: true,
@@ -224,6 +224,7 @@ const logger = new Logger({
224
224
  ## Log Formats
225
225
 
226
226
  ### JSON (Default for Production)
227
+
227
228
  ```json
228
229
  {
229
230
  "timestamp": "2024-11-21T10:30:45.123Z",
@@ -237,16 +238,19 @@ const logger = new Logger({
237
238
  ```
238
239
 
239
240
  ### Pretty (Default for Development)
241
+
240
242
  ```
241
243
  2024-11-21T10:30:45.123Z INFO [backend] API request completed {"requestId":"req_abc123","statusCode":200}
242
244
  ```
243
245
 
244
246
  ### Compact
247
+
245
248
  ```
246
249
  10:30:45 I [backend] API request completed
247
250
  ```
248
251
 
249
252
  ### ECS (Elastic Common Schema)
253
+
250
254
  ```json
251
255
  {
252
256
  "@timestamp": "2024-11-21T10:30:45.123Z",
@@ -260,6 +264,7 @@ const logger = new Logger({
260
264
  ## File Rotation
261
265
 
262
266
  Logs are automatically rotated based on:
267
+
263
268
  - **Size**: When file exceeds `maxSize` (default: 10MB)
264
269
  - **Date**: Daily rotation with `datePattern` (default: YYYY-MM-DD)
265
270
  - **Compression**: Old files are gzipped (optional)
@@ -292,6 +297,7 @@ bun run typecheck
292
297
  ## Performance
293
298
 
294
299
  Benchmarked on Apple M1:
300
+
295
301
  - Simple log: ~0.05ms
296
302
  - Log with metadata: ~0.08ms
297
303
  - File write: ~0.15ms
@@ -1,4 +1,4 @@
1
- import type { LogLevel } from '../types/logger.js';
1
+ import type { LogLevel } from "../types/logger.js";
2
2
  export declare const LOG_LEVELS: Record<LogLevel, number>;
3
3
  export declare const LOG_LEVEL_NAMES: Record<number, LogLevel>;
4
4
  export declare const COLORS: {
@@ -1,4 +1,4 @@
1
- import type { BaseLogMeta } from '../../types/logger.js';
1
+ import type { BaseLogMeta } from "../../types/logger.js";
2
2
  export declare class ContextManager {
3
3
  private storage;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { BaseLogMeta, LogFormat } from '../../types/logger.js';
1
+ import type { BaseLogMeta, LogFormat } from "../../types/logger.js";
2
2
  export interface FormatterOptions {
3
3
  colorize?: boolean;
4
4
  prettyPrint?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;CACpD;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,SAAS;IACjC,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,gBAAqB;IAElD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;CAUnD;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,SAAS;IACnC,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,gBAAqB;IAElD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;IAqClD,OAAO,CAAC,qBAAqB;CAc9B;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IACpC,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,gBAAqB;IAElD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;CAMnD;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS;IAChC,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,gBAAqB;IAElD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;IAuBlD,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,gBAAgB;CAoCzB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,gBAAqB,GAC7B,SAAS,CAaX"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;CACpD;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,SAAS;IACjC,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,gBAAqB;IAElD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;CAUnD;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,SAAS;IACnC,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,gBAAqB;IAElD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;IAqClD,OAAO,CAAC,qBAAqB;CAc9B;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IACpC,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,gBAAqB;IAElD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;CAOnD;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS;IAChC,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,gBAAqB;IAElD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;IAuBlD,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,gBAAgB;CAoCzB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,gBAAqB,GAC7B,SAAS,CAaX"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- export { Logger } from './logger.js';
2
- export { BaseTransport, ConsoleTransport, FileTransport, HTTPTransport, } from './transports/index.js';
3
- export { createFormatter, JSONFormatter, PrettyFormatter, CompactFormatter, ECSFormatter, type Formatter, type FormatterOptions, } from './formatters/index.js';
4
- export { ContextManager, contextManager } from './context/manager.js';
5
- export { parseSize, formatBytes, formatDuration, getHostname, getPid, generateId, sanitize, deepMerge, formatDateForFile, safeStringify, ensureDir, isProduction, isDevelopment, } from './utils/helpers.js';
6
- export { LOG_LEVELS, LOG_LEVEL_NAMES, COLORS } from './constants.js';
7
- export type * from '../types/logger.js';
1
+ export { Logger } from "./logger.js";
2
+ export { BaseTransport, ConsoleTransport, FileTransport, HTTPTransport, } from "./transports/index.js";
3
+ export { createFormatter, JSONFormatter, PrettyFormatter, CompactFormatter, ECSFormatter, type Formatter, type FormatterOptions, } from "./formatters/index.js";
4
+ export { ContextManager, contextManager } from "./context/manager.js";
5
+ export { parseSize, formatBytes, formatDuration, getHostname, getPid, generateId, sanitize, deepMerge, formatDateForFile, safeStringify, ensureDir, isProduction, isDevelopment, } from "./utils/helpers.js";
6
+ export { LOG_LEVELS, LOG_LEVEL_NAMES, COLORS } from "./constants.js";
7
+ export type * from "../types/logger.js";
8
8
  //# sourceMappingURL=index.d.ts.map