Skip to content

Commit 41deb3c

Browse files
committed
feat: support logger options
1 parent 89e8d9b commit 41deb3c

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

package.json

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
{
22
"name": "reggol",
33
"description": "Logger for professionals",
4-
"version": "2.0.3",
4+
"version": "2.1.0",
55
"sideEffects": false,
66
"type": "module",
7+
"main": "lib/node.js",
8+
"types": "lib/shared.d.ts",
79
"exports": {
810
".": {
9-
"types": "./shared.d.ts",
11+
"types": "./lib/shared.d.ts",
1012
"node": "./lib/node.js",
1113
"default": "./lib/browser.js"
1214
},
@@ -52,7 +54,7 @@
5254
"typescript": "^5.5.3"
5355
},
5456
"dependencies": {
55-
"cosmokit": "^1.7.2",
57+
"cosmokit": "^1.7.3",
5658
"object-inspect": "^1.13.4",
5759
"supports-color": "^10.0.0"
5860
}

src/shared.ts

+20-9
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ export const enum Level {
3939
DEBUG = 3,
4040
}
4141

42+
export namespace Logger {
43+
export interface Options {
44+
name: string
45+
meta?: Partial<Message>
46+
level?: Level
47+
}
48+
}
49+
50+
export interface Logger extends Logger.Options {}
51+
4252
export class Logger {
4353
static color(exporter: Exporter, code: number, value: any, decoration = '') {
4454
if (!exporter.colors) return '' + value
@@ -55,7 +65,8 @@ export class Logger {
5565
return colors[Math.abs(hash) % colors.length]
5666
}
5767

58-
constructor(public name: string, private _meta: any, private _factory: Factory) {
68+
constructor(options: Logger.Options, private factory: Factory) {
69+
Object.assign(this, options)
5970
this.success = this._method('success', Level.SUCCESS)
6071
this.error = this._method('error', Level.ERROR)
6172
this.info = this._method('info', Level.INFO)
@@ -74,13 +85,13 @@ export class Logger {
7485
}
7586
}
7687

77-
const sn = ++this._factory._snMessage
88+
const sn = ++this.factory._snMessage
7889
const ts = Date.now()
79-
for (const exporter of this._factory.exporters.values()) {
80-
const targetLevel = exporter.levels?.[this.name] ?? exporter.levels?.default ?? Level.INFO
90+
for (const exporter of this.factory.exporters.values()) {
91+
const targetLevel = exporter.levels?.[this.name] ?? exporter.levels?.default ?? this.level ?? Level.INFO
8192
if (targetLevel < level) continue
8293
const body = this._format(exporter, args.slice())
83-
const message: Message = { ...this._meta, sn, ts, type, level, name: this.name, body }
94+
const message: Message = { sn, ts, type, level, name: this.name, ...this.meta, body }
8495
exporter.export(message)
8596
}
8697
}
@@ -97,7 +108,7 @@ export class Logger {
97108
let format: string = args.shift()
98109
format = format.replace(/%([a-zA-Z%])/g, (match, char) => {
99110
if (match === '%%') return '%'
100-
const formatter = this._factory.formatters[char]
111+
const formatter = this.factory.formatters[char]
101112
if (typeof formatter === 'function') {
102113
const value = args.shift()
103114
return formatter(value, exporter, this)
@@ -107,7 +118,7 @@ export class Logger {
107118

108119
for (let arg of args) {
109120
if (typeof arg === 'object' && arg) {
110-
arg = this._factory.formatters['o'](arg, exporter, this)
121+
arg = this.factory.formatters['o'](arg, exporter, this)
111122
}
112123
format += ' ' + arg
113124
}
@@ -134,8 +145,8 @@ export class Factory {
134145
exporters = new Map<number, Exporter>()
135146
formatters = Object.create(Factory.formatters)
136147

137-
createLogger(name: string, meta: any = {}) {
138-
return new Logger(name, meta, this)
148+
createLogger(name: string, options: Omit<Logger.Options, 'name'> = {}) {
149+
return new Logger({ name, ...options }, this)
139150
}
140151

141152
addExporter(exporter: Exporter) {

0 commit comments

Comments
 (0)