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.
- package/README.md +0 -0
- package/dist/axon.browser.js +2 -0
- package/dist/axon.browser.js.map +1 -0
- package/dist/cli/axon-cli.d.ts +7 -0
- package/dist/cli/axon-cli.d.ts.map +1 -0
- package/dist/cli/axon-cli.js +179 -0
- package/dist/cli/axon-cli.js.map +1 -0
- package/dist/extractor/LogExtractor.d.ts +64 -0
- package/dist/extractor/LogExtractor.d.ts.map +1 -0
- package/dist/extractor/LogExtractor.js +237 -0
- package/dist/extractor/LogExtractor.js.map +1 -0
- package/dist/extractor/index.d.ts +2 -0
- package/dist/extractor/index.d.ts.map +1 -0
- package/dist/extractor/index.js +6 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/file-manager/BrowserFileManager.d.ts +102 -0
- package/dist/file-manager/BrowserFileManager.d.ts.map +1 -0
- package/dist/file-manager/BrowserFileManager.js +281 -0
- package/dist/file-manager/BrowserFileManager.js.map +1 -0
- package/dist/file-manager/FileManager.d.ts +103 -0
- package/dist/file-manager/FileManager.d.ts.map +1 -0
- package/dist/file-manager/FileManager.js +331 -0
- package/dist/file-manager/FileManager.js.map +1 -0
- package/dist/file-manager/index.d.ts +7 -0
- package/dist/file-manager/index.d.ts.map +1 -0
- package/dist/file-manager/index.js +11 -0
- package/dist/file-manager/index.js.map +1 -0
- package/dist/file-manager/types.d.ts +37 -0
- package/dist/file-manager/types.d.ts.map +1 -0
- package/dist/file-manager/types.js +6 -0
- package/dist/file-manager/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/ConfigLoader.d.ts +27 -0
- package/dist/logger/ConfigLoader.d.ts.map +1 -0
- package/dist/logger/ConfigLoader.js +210 -0
- package/dist/logger/ConfigLoader.js.map +1 -0
- package/dist/logger/Logger.d.ts +142 -0
- package/dist/logger/Logger.d.ts.map +1 -0
- package/dist/logger/Logger.js +511 -0
- package/dist/logger/Logger.js.map +1 -0
- package/dist/logger/index.d.ts +7 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +17 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/types.d.ts +107 -0
- package/dist/logger/types.d.ts.map +1 -0
- package/dist/logger/types.js +57 -0
- package/dist/logger/types.js.map +1 -0
- package/dist/parser/StreamingParser.d.ts +21 -0
- package/dist/parser/StreamingParser.d.ts.map +1 -0
- package/dist/parser/StreamingParser.js +70 -0
- package/dist/parser/StreamingParser.js.map +1 -0
- package/dist/parser/TOONParser.d.ts +113 -0
- package/dist/parser/TOONParser.d.ts.map +1 -0
- package/dist/parser/TOONParser.js +386 -0
- package/dist/parser/TOONParser.js.map +1 -0
- package/dist/parser/index.d.ts +8 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +13 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/serializer/TOONSerializer.d.ts +232 -0
- package/dist/serializer/TOONSerializer.d.ts.map +1 -0
- package/dist/serializer/TOONSerializer.js +497 -0
- package/dist/serializer/TOONSerializer.js.map +1 -0
- package/dist/serializer/index.d.ts +7 -0
- package/dist/serializer/index.d.ts.map +1 -0
- package/dist/serializer/index.js +11 -0
- package/dist/serializer/index.js.map +1 -0
- package/dist/utils/TokenCounter.d.ts +31 -0
- package/dist/utils/TokenCounter.d.ts.map +1 -0
- package/dist/utils/TokenCounter.js +44 -0
- package/dist/utils/TokenCounter.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/docs/API.md +315 -0
- package/package.json +49 -0
- 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
|
+
}
|