@@ -4,10 +4,6 @@ const logLevel = require('loglevel')
44const chalk = require ( 'chalk' )
55const prefix = require ( 'loglevel-plugin-prefix' )
66
7- const getKeyByValue = ( object , value ) => {
8- return Object . keys ( object ) . find ( key => object [ key ] === value )
9- }
10-
117const colors = Object . freeze ( {
128 TRACE : chalk . magenta ,
139 DEBUG : chalk . cyan ,
@@ -16,42 +12,64 @@ const colors = Object.freeze({
1612 ERROR : chalk . red
1713} )
1814
19- const logConfiguration = {
20- // template: '[%t] %l %n:',
21- format ( level , name , timestamp ) {
22- return `${ chalk . gray ( `[${ timestamp } ]` ) } ${ colors [ level . toUpperCase ( ) ] ( level ) } ${ chalk . green ( `${ name } :` ) } `
23- } ,
24- timestampFormatter : ( ) => {
25- const tzOffset = ( new Date ( ) ) . getTimezoneOffset ( ) * 60000 // offset in milliseconds
26- const localISOTime = ( new Date ( Date . now ( ) - tzOffset ) ) . toISOString ( ) . slice ( 0 , - 1 ) // => '2015-01-26T06:40:36.181'
27- return localISOTime
28- }
15+ const defaultTimestampFormatter = ( date ) => {
16+ const tzOffset = date . getTimezoneOffset ( ) * 60000 // offset in milliseconds
17+ const localISOTime = ( new Date ( date - tzOffset ) ) . toISOString ( ) . slice ( 0 , - 1 ) // => '2015-01-26T06:40:36.181'
18+ return localISOTime
19+ }
20+
21+ const defaultNameFormatter = ( name ) => {
22+ return chalk . green ( name )
23+ }
24+
25+ const defaultLevelFormatter = ( level ) => {
26+ return colors [ level . toUpperCase ( ) ] ( level . toUpperCase ( ) )
2927}
3028
31- module . exports . levels = logLevel . levels
29+ const defaultTemplate = '[%t] %l [%n]:'
3230
33- module . exports . monkLog = ( { name = '' , level = logLevel . levels . DEBUG , wrap = [ '[' , ']' ] } = { } ) => {
34- if ( ! Array . isArray ( wrap ) ) {
35- wrap = [ '[' , ']' ]
31+ const defaultOptions = {
32+ levelFormatter : defaultLevelFormatter ,
33+ timestampFormatter : defaultTimestampFormatter ,
34+ nameFormatter : defaultNameFormatter ,
35+ template : defaultTemplate ,
36+ level : 'WARN'
37+ }
38+
39+ const _loggersByName = { }
40+
41+ class MonkLogger extends logLevel . constructor {
42+ constructor ( name , level , options ) {
43+ super ( name , level )
44+ this . options = { ...defaultOptions }
45+ this . configure ( options )
3646 }
3747
38- if ( wrap . length !== 2 ) {
39- throw new Error ( `Wrong wrap params, expected 2 got ${ wrap . length } elements` )
48+ configure ( options , reset = false ) {
49+ this . options = {
50+ ...( reset ? defaultOptions : this . options ) ,
51+ ...options ,
52+ }
53+ this . setLevel ( this . options . level )
54+ prefix . apply ( this , this . options )
4055 }
4156
42- let logger
43- if ( name ) {
44- name = `${ wrap [ 0 ] } ${ name } ${ wrap [ 1 ] } `
45- logger = logLevel . getLogger ( name )
46- } else {
47- // root name is nasty
48- logger = logLevel . getLogger ( 'monk-log' )
57+ getLogger ( name , level , options ) {
58+ if ( typeof name !== "string" || name === "" ) {
59+ throw new TypeError ( "You must supply a name when creating a logger." )
60+ }
61+ let logger = _loggersByName [ name ]
62+ if ( ! logger ) {
63+ logger = _loggersByName [ name ] = new MonkLogger (
64+ name , level , { ...this . options , ...options } )
65+ }
66+ return logger
4967 }
68+ }
5069
51- prefix . reg ( logLevel )
52- prefix . apply ( logger , logConfiguration )
53- logger . setLevel ( level )
54- logger . info ( `Set log level to ${ getKeyByValue ( logger . levels , level ) } ` )
70+ prefix . reg ( logLevel )
5571
56- return logger
57- }
72+ const defaultLogger = new MonkLogger ( 'root' )
73+ defaultLogger . getLoggers = ( ) => _loggersByName
74+
75+ module . exports = defaultLogger
0 commit comments