Skip to content

Commit 04409d0

Browse files
committed
feat(logger): add CustomLogger
1 parent 64b00de commit 04409d0

File tree

3 files changed

+52
-9
lines changed

3 files changed

+52
-9
lines changed

packages/logger/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@spark.ts/logger",
3-
"version": "1.3.7",
3+
"version": "1.4.0",
44
"description": "a logger that extends the native console",
55
"main": "dist/index.js",
66
"scripts": {

packages/logger/src/index.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/* eslint-disable no-console */
2+
/* eslint-disable max-classes-per-file */
23
import colors from 'ansi-colors';
34
import { format } from 'util';
45

@@ -183,3 +184,37 @@ export class Logger extends console.Console {
183184
this.logMessage(format(...args), 'debug');
184185
}
185186
}
187+
188+
type LogFn = (...args: unknown[]) => unknown;
189+
type CallbackLogFn = (msg: string) => string;
190+
191+
/**
192+
* A customizable logger with custom methods & titles.
193+
*/
194+
export class CustomLogger {
195+
/**
196+
* Configure the methods for the logger.
197+
*/
198+
public setMethods<Methods extends Record<string, CallbackLogFn>>(methods: Methods) {
199+
return {
200+
/**
201+
* Sets the level of the logger. You can only see the logs from levels that are included here.
202+
*/
203+
setLevel(level: (keyof Methods)[]) {
204+
const obj = {} as Record<keyof Methods, LogFn>;
205+
206+
for (const key of Object.keys(methods) as (keyof Methods)[]) {
207+
obj[key] = (...args: unknown[]) => {
208+
if (!level.includes(key)) return;
209+
210+
const msg = format(...args);
211+
212+
console.log(methods[key]!(msg));
213+
};
214+
}
215+
216+
return obj;
217+
},
218+
};
219+
}
220+
}

packages/logger/src/test.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
1-
import { Logger } from './index';
1+
import { CustomLogger, Logger } from './index';
22

33
const logger = new Logger({
4-
messages: {
5-
debug: 'Debug : {msg}',
6-
error: 'Error : {msg}',
7-
info: 'Info : {msg}',
8-
warn: 'Info : {msg}',
9-
success: 'Info : {msg}',
10-
},
4+
// messages: {
5+
// debug: 'Debug : {msg}',
6+
// error: 'Error : {msg}',
7+
// info: 'Info : {msg}',
8+
// warn: 'Info : {msg}',
9+
// success: 'Info : {msg}',
10+
// },
1111
logLevel: 'debug',
1212
});
1313

1414
['debug', 'error', 'info', 'warn', 'success'].forEach((v) => {
1515
logger[v]('Hello World!');
1616
});
17+
18+
const customLogger = new CustomLogger()
19+
.setMethods({
20+
hello: (m) => `Hello ${m}`,
21+
})
22+
.setLevel(['hello']);
23+
24+
customLogger.hello('World!');

0 commit comments

Comments
 (0)