axon-logger 1.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.
Files changed (82) hide show
  1. package/README.md +0 -0
  2. package/dist/axon.browser.js +2 -0
  3. package/dist/axon.browser.js.map +1 -0
  4. package/dist/cli/axon-cli.d.ts +7 -0
  5. package/dist/cli/axon-cli.d.ts.map +1 -0
  6. package/dist/cli/axon-cli.js +179 -0
  7. package/dist/cli/axon-cli.js.map +1 -0
  8. package/dist/extractor/LogExtractor.d.ts +64 -0
  9. package/dist/extractor/LogExtractor.d.ts.map +1 -0
  10. package/dist/extractor/LogExtractor.js +237 -0
  11. package/dist/extractor/LogExtractor.js.map +1 -0
  12. package/dist/extractor/index.d.ts +2 -0
  13. package/dist/extractor/index.d.ts.map +1 -0
  14. package/dist/extractor/index.js +6 -0
  15. package/dist/extractor/index.js.map +1 -0
  16. package/dist/file-manager/BrowserFileManager.d.ts +102 -0
  17. package/dist/file-manager/BrowserFileManager.d.ts.map +1 -0
  18. package/dist/file-manager/BrowserFileManager.js +281 -0
  19. package/dist/file-manager/BrowserFileManager.js.map +1 -0
  20. package/dist/file-manager/FileManager.d.ts +103 -0
  21. package/dist/file-manager/FileManager.d.ts.map +1 -0
  22. package/dist/file-manager/FileManager.js +331 -0
  23. package/dist/file-manager/FileManager.js.map +1 -0
  24. package/dist/file-manager/index.d.ts +7 -0
  25. package/dist/file-manager/index.d.ts.map +1 -0
  26. package/dist/file-manager/index.js +11 -0
  27. package/dist/file-manager/index.js.map +1 -0
  28. package/dist/file-manager/types.d.ts +37 -0
  29. package/dist/file-manager/types.d.ts.map +1 -0
  30. package/dist/file-manager/types.js +6 -0
  31. package/dist/file-manager/types.js.map +1 -0
  32. package/dist/index.d.ts +11 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +34 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/logger/ConfigLoader.d.ts +27 -0
  37. package/dist/logger/ConfigLoader.d.ts.map +1 -0
  38. package/dist/logger/ConfigLoader.js +210 -0
  39. package/dist/logger/ConfigLoader.js.map +1 -0
  40. package/dist/logger/Logger.d.ts +142 -0
  41. package/dist/logger/Logger.d.ts.map +1 -0
  42. package/dist/logger/Logger.js +511 -0
  43. package/dist/logger/Logger.js.map +1 -0
  44. package/dist/logger/index.d.ts +7 -0
  45. package/dist/logger/index.d.ts.map +1 -0
  46. package/dist/logger/index.js +17 -0
  47. package/dist/logger/index.js.map +1 -0
  48. package/dist/logger/types.d.ts +107 -0
  49. package/dist/logger/types.d.ts.map +1 -0
  50. package/dist/logger/types.js +57 -0
  51. package/dist/logger/types.js.map +1 -0
  52. package/dist/parser/StreamingParser.d.ts +21 -0
  53. package/dist/parser/StreamingParser.d.ts.map +1 -0
  54. package/dist/parser/StreamingParser.js +70 -0
  55. package/dist/parser/StreamingParser.js.map +1 -0
  56. package/dist/parser/TOONParser.d.ts +113 -0
  57. package/dist/parser/TOONParser.d.ts.map +1 -0
  58. package/dist/parser/TOONParser.js +386 -0
  59. package/dist/parser/TOONParser.js.map +1 -0
  60. package/dist/parser/index.d.ts +8 -0
  61. package/dist/parser/index.d.ts.map +1 -0
  62. package/dist/parser/index.js +13 -0
  63. package/dist/parser/index.js.map +1 -0
  64. package/dist/serializer/TOONSerializer.d.ts +232 -0
  65. package/dist/serializer/TOONSerializer.d.ts.map +1 -0
  66. package/dist/serializer/TOONSerializer.js +497 -0
  67. package/dist/serializer/TOONSerializer.js.map +1 -0
  68. package/dist/serializer/index.d.ts +7 -0
  69. package/dist/serializer/index.d.ts.map +1 -0
  70. package/dist/serializer/index.js +11 -0
  71. package/dist/serializer/index.js.map +1 -0
  72. package/dist/utils/TokenCounter.d.ts +31 -0
  73. package/dist/utils/TokenCounter.d.ts.map +1 -0
  74. package/dist/utils/TokenCounter.js +44 -0
  75. package/dist/utils/TokenCounter.js.map +1 -0
  76. package/dist/utils/index.d.ts +5 -0
  77. package/dist/utils/index.d.ts.map +1 -0
  78. package/dist/utils/index.js +9 -0
  79. package/dist/utils/index.js.map +1 -0
  80. package/docs/API.md +315 -0
  81. package/package.json +49 -0
  82. package/tsconfig.json +24 -0
package/docs/API.md ADDED
@@ -0,0 +1,315 @@
1
+ # AXON API Documentation
2
+
3
+ ## Table of Contents
4
+ - [Logger](#logger)
5
+ - [Configuration](#configuration)
6
+ - [Log Levels](#log-levels)
7
+ - [Serialization](#serialization)
8
+ - [File Management](#file-management)
9
+ - [Log Extraction](#log-extraction)
10
+ - [CLI Tools](#cli-tools)
11
+
12
+ ## Logger
13
+
14
+ ### Creating a Logger
15
+
16
+ ```typescript
17
+ import { Logger, LogLevel } from 'axon';
18
+
19
+ const logger = new Logger({
20
+ outputPath: './logs/app.txt',
21
+ level: LogLevel.INFO,
22
+ maxFileSize: 10 * 1024 * 1024, // 10MB
23
+ rotationInterval: 'daily',
24
+ bufferSize: 100,
25
+ flushInterval: 5000
26
+ });
27
+ ```
28
+
29
+ ### Logging Methods
30
+
31
+ ```typescript
32
+ // Log at different levels
33
+ logger.debug('Debug message', { userId: 123 });
34
+ logger.info('Info message');
35
+ logger.warn('Warning message');
36
+ logger.error('Error message');
37
+ logger.fatal('Fatal error');
38
+
39
+ // Synchronous logging (bypasses buffering)
40
+ await logger.fatalSync('Critical error');
41
+ await logger.errorSync('Important error');
42
+ ```
43
+
44
+ ### Global Metadata
45
+
46
+ ```typescript
47
+ // Set global metadata included in all logs
48
+ logger.setGlobalMetadata({ appName: 'my-app', version: '1.0.0' });
49
+
50
+ // Clear global metadata
51
+ logger.clearGlobalMetadata();
52
+ ```
53
+
54
+ ### Section Markers
55
+
56
+ ```typescript
57
+ // Add section markers for log organization
58
+ logger.mark('authentication-flow');
59
+ logger.info('User logged in');
60
+ logger.mark('end-authentication');
61
+ ```
62
+
63
+ ### Flushing and Closing
64
+
65
+ ```typescript
66
+ // Flush buffered entries immediately
67
+ await logger.flush();
68
+
69
+ // Close logger and release resources
70
+ await logger.close();
71
+ ```
72
+
73
+ ## Configuration
74
+
75
+ ### Configuration Options
76
+
77
+ ```typescript
78
+ interface LoggerConfig {
79
+ outputPath: string; // File path for logs
80
+ level: LogLevel; // Minimum log level
81
+ maxFileSize?: number; // Max file size before rotation (bytes)
82
+ rotationInterval?: 'hourly' | 'daily' | 'weekly' | 'none';
83
+ fieldAliases?: Record<string, string>; // Field name aliases
84
+ omitNullValues?: boolean; // Omit null/undefined values
85
+ bufferSize?: number; // Number of entries to buffer
86
+ flushInterval?: number; // Auto-flush interval (ms)
87
+ delimiter?: ',' | '\t' | '|'; // Field delimiter
88
+ onError?: (error: Error) => void; // Error callback
89
+ metadataFilter?: MetadataFilter; // Filter sensitive metadata
90
+ }
91
+ ```
92
+
93
+ ### Configuration Sources
94
+
95
+ Configuration is loaded from multiple sources with precedence:
96
+ 1. Constructor options (highest priority)
97
+ 2. Environment variables
98
+ 3. `.axonrc.json` file
99
+ 4. Default values (lowest priority)
100
+
101
+ ### Environment Variables
102
+
103
+ ```bash
104
+ AXON_LOG_LEVEL=INFO
105
+ AXON_OUTPUT_PATH=./logs/app.txt
106
+ AXON_MAX_FILE_SIZE=10485760
107
+ AXON_ROTATION_INTERVAL=daily
108
+ AXON_BUFFER_SIZE=100
109
+ AXON_FLUSH_INTERVAL=5000
110
+ AXON_DELIMITER=,
111
+ AXON_OMIT_NULL_VALUES=true
112
+ ```
113
+
114
+ ### Runtime Configuration Updates
115
+
116
+ ```typescript
117
+ // Update log level at runtime
118
+ logger.setLevel(LogLevel.DEBUG);
119
+
120
+ // Update multiple settings
121
+ logger.updateConfig({
122
+ bufferSize: 200,
123
+ flushInterval: 10000
124
+ });
125
+ ```
126
+
127
+ ## Log Levels
128
+
129
+ ```typescript
130
+ enum LogLevel {
131
+ DEBUG = 0,
132
+ INFO = 1,
133
+ WARN = 2,
134
+ ERROR = 3,
135
+ FATAL = 4
136
+ }
137
+ ```
138
+
139
+ Logs are filtered based on the configured level. Only logs at or above the configured level are processed.
140
+
141
+ ## Serialization
142
+
143
+ ### TOON Serializer
144
+
145
+ ```typescript
146
+ import { TOONSerializer } from 'axon';
147
+
148
+ const serializer = new TOONSerializer({
149
+ delimiter: ',',
150
+ omitNullValues: true,
151
+ fieldAliases: { timestamp: 'ts', message: 'msg' },
152
+ maxDepth: 10
153
+ });
154
+
155
+ const toon = serializer.serialize({ name: 'Alice', age: 30 });
156
+ ```
157
+
158
+ ### TOON Parser
159
+
160
+ ```typescript
161
+ import { TOONParser } from 'axon';
162
+
163
+ const parser = new TOONParser();
164
+ const obj = parser.parse('name: Alice, age: 30');
165
+ ```
166
+
167
+ ### Streaming Parser
168
+
169
+ ```typescript
170
+ import { StreamingParser } from 'axon';
171
+ import * as fs from 'fs';
172
+
173
+ const parser = new StreamingParser();
174
+ const stream = fs.createReadStream('./logs/app.txt');
175
+
176
+ for await (const entry of parser.parseStream(stream)) {
177
+ console.log(entry);
178
+ }
179
+ ```
180
+
181
+ ## File Management
182
+
183
+ ### Node.js File Manager
184
+
185
+ ```typescript
186
+ import { FileManager } from 'axon';
187
+
188
+ const fileManager = new FileManager({
189
+ outputPath: './logs/app.txt',
190
+ maxFileSize: 10 * 1024 * 1024,
191
+ rotationInterval: 'daily',
192
+ bufferSize: 100,
193
+ flushInterval: 5000,
194
+ environment: 'node',
195
+ onError: (err) => console.error(err)
196
+ });
197
+
198
+ fileManager.write('log entry');
199
+ await fileManager.flush();
200
+ await fileManager.close();
201
+ ```
202
+
203
+ ### Browser File Manager
204
+
205
+ ```typescript
206
+ import { BrowserFileManager } from 'axon';
207
+
208
+ const fileManager = new BrowserFileManager({
209
+ outputPath: 'app-logs',
210
+ maxFileSize: 5 * 1024 * 1024,
211
+ rotationInterval: 'none',
212
+ bufferSize: 50,
213
+ flushInterval: 3000,
214
+ environment: 'browser',
215
+ onError: (err) => console.error(err)
216
+ });
217
+
218
+ // Download logs
219
+ fileManager.downloadLogs();
220
+ ```
221
+
222
+ ## Log Extraction
223
+
224
+ ### LogExtractor
225
+
226
+ ```typescript
227
+ import { LogExtractor, LogLevel } from 'axon';
228
+
229
+ const extractor = new LogExtractor('./logs/app.txt');
230
+
231
+ // Extract by section
232
+ const section = extractor.extractSection('auth-flow', 'end-auth');
233
+
234
+ // Extract by time range
235
+ const timeRange = extractor.extractTimeRange(
236
+ new Date('2024-01-01'),
237
+ new Date('2024-01-02')
238
+ );
239
+
240
+ // Extract by log level
241
+ const errors = extractor.extractByLevel(LogLevel.ERROR);
242
+
243
+ // Export to file
244
+ await extractor.exportSection(errors, './logs/errors.txt');
245
+ ```
246
+
247
+ ## CLI Tools
248
+
249
+ ### Extract Command
250
+
251
+ ```bash
252
+ # Extract by section
253
+ axon extract logs/app.txt --section auth-flow --end-section end-auth
254
+
255
+ # Extract by time range
256
+ axon extract logs/app.txt --time-range "2024-01-01T00:00:00Z,2024-01-02T00:00:00Z"
257
+
258
+ # Extract by log level
259
+ axon extract logs/app.txt --level ERROR
260
+
261
+ # Output to file
262
+ axon extract logs/app.txt --level ERROR --output errors.txt
263
+ ```
264
+
265
+ ### Count Command
266
+
267
+ ```bash
268
+ # Count tokens in entire file
269
+ axon count logs/app.txt
270
+
271
+ # Count tokens in section
272
+ axon count logs/app.txt --section auth-flow
273
+ ```
274
+
275
+ ### Export Command
276
+
277
+ ```bash
278
+ # Export filtered logs
279
+ axon export logs/app.txt filtered.txt --level ERROR
280
+
281
+ # Export section
282
+ axon export logs/app.txt section.txt --section auth-flow
283
+ ```
284
+
285
+ ## Metadata Filtering
286
+
287
+ Filter sensitive metadata fields before serialization:
288
+
289
+ ```typescript
290
+ const logger = new Logger({
291
+ outputPath: './logs/app.txt',
292
+ level: LogLevel.INFO,
293
+ metadataFilter: {
294
+ fieldNames: ['password', 'apiKey'],
295
+ fieldPatterns: ['.*secret.*', '.*token.*']
296
+ }
297
+ });
298
+
299
+ // These fields will be filtered out
300
+ logger.info('User login', {
301
+ username: 'alice',
302
+ password: 'secret123', // Filtered
303
+ apiKey: 'key123' // Filtered
304
+ });
305
+ ```
306
+
307
+ ## Token Counting
308
+
309
+ ```typescript
310
+ import { TokenCounter } from 'axon';
311
+
312
+ const counter = new TokenCounter();
313
+ const tokenCount = counter.countTokens(logContent);
314
+ console.log(`Token count: ${tokenCount}`);
315
+ ```
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "axon-logger",
3
+ "version": "1.0.0",
4
+ "description": "A token-efficient logging framework using TOON (Token-Oriented Object Notation) format",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "build:browser": "webpack --config webpack.config.js",
10
+ "test": "jest",
11
+ "test:watch": "jest --watch",
12
+ "test:coverage": "jest --coverage",
13
+ "lint": "eslint src tests --ext .ts",
14
+ "lint:fix": "eslint src tests --ext .ts --fix",
15
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
16
+ "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
17
+ "clean": "rm -rf dist"
18
+ },
19
+ "keywords": [
20
+ "logging",
21
+ "logger",
22
+ "toon",
23
+ "token-efficient",
24
+ "ai",
25
+ "llm"
26
+ ],
27
+ "author": "",
28
+ "license": "MIT",
29
+ "devDependencies": {
30
+ "@types/jest": "^29.5.11",
31
+ "@types/node": "^20.10.6",
32
+ "@typescript-eslint/eslint-plugin": "^6.17.0",
33
+ "@typescript-eslint/parser": "^6.17.0",
34
+ "eslint": "^8.56.0",
35
+ "eslint-config-prettier": "^9.1.0",
36
+ "eslint-plugin-prettier": "^5.1.2",
37
+ "fast-check": "^3.15.0",
38
+ "jest": "^29.7.0",
39
+ "prettier": "^3.1.1",
40
+ "ts-jest": "^29.1.1",
41
+ "ts-loader": "^9.5.1",
42
+ "typescript": "^5.3.3",
43
+ "webpack": "^5.89.0",
44
+ "webpack-cli": "^5.1.4"
45
+ },
46
+ "dependencies": {
47
+ "commander": "^14.0.3"
48
+ }
49
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "commonjs",
5
+ "lib": ["ES2020", "DOM"],
6
+ "declaration": true,
7
+ "declarationMap": true,
8
+ "sourceMap": true,
9
+ "outDir": "./dist",
10
+ "rootDir": "./src",
11
+ "strict": true,
12
+ "esModuleInterop": true,
13
+ "skipLibCheck": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+ "moduleResolution": "node",
16
+ "resolveJsonModule": true,
17
+ "noUnusedLocals": true,
18
+ "noUnusedParameters": true,
19
+ "noImplicitReturns": true,
20
+ "noFallthroughCasesInSwitch": true
21
+ },
22
+ "include": ["src/**/*"],
23
+ "exclude": ["node_modules", "dist"]
24
+ }