UNPKG

@axiomhq/logging

Version:
1 lines 4.56 kB
{"version":3,"file":"console.cjs","sources":["../../../src/transports/console.ts"],"sourcesContent":["import { Transport } from './transport';\nimport { LogEvent, LogLevel, LogLevelValue } from '../logger';\nimport { isBrowser } from '../runtime';\nexport interface ConsoleTransportConfig {\n prettyPrint?: boolean;\n logLevel?: LogLevel;\n}\n\nconst levelColors: { [key: string]: any } = {\n info: {\n terminal: '32',\n browser: 'lightgreen',\n },\n debug: {\n terminal: '36',\n browser: 'lightblue',\n },\n warn: {\n terminal: '33',\n browser: 'yellow',\n },\n error: {\n terminal: '31',\n browser: 'red',\n },\n};\n\nexport class ConsoleTransport implements Transport {\n private config: ConsoleTransportConfig;\n\n constructor(config?: ConsoleTransportConfig) {\n this.config = { ...config };\n }\n\n log: Transport['log'] = (logs) => {\n logs.forEach((log) => {\n if (\n LogLevelValue[(log.level as LogLevel) ?? LogLevel.info] >= LogLevelValue[this.config.logLevel ?? LogLevel.info]\n ) {\n this.prettyPrint(log);\n }\n });\n };\n\n private isStandardLogEvent(log: any): log is LogEvent {\n return typeof log === 'object' && log !== null && 'level' in log && 'message' in log && 'fields' in log;\n }\n\n prettyPrint(ev: LogEvent) {\n const hasFields = ev.fields && Object.keys(ev.fields).length > 0;\n\n // check whether pretty print is disabled\n if (!this.config.prettyPrint) {\n if (!this.isStandardLogEvent(ev)) {\n console.log(ev);\n return;\n }\n let msg = `${ev.level} - ${ev.message}`;\n if (hasFields) {\n msg += ' ' + JSON.stringify(ev.fields);\n }\n console.log(msg);\n return;\n }\n\n if (!this.isStandardLogEvent(ev)) {\n if (isBrowser) {\n console.log('%c%s', `color: ${levelColors[LogLevel.info].browser};`, ev);\n } else {\n console.log(`\\x1b[${levelColors[LogLevel.info].terminal}m%s\\x1b[0m`, ev);\n }\n return;\n }\n // print indented message, instead of [object]\n // We use the %o modifier instead of JSON.stringify because stringify will print the\n // object as normal text, it loses all the functionality the browser gives for viewing\n // objects in the console, such as expanding and collapsing the object.\n let msgString = '';\n let args: any[] = [ev.level, ev.message];\n\n if (isBrowser) {\n msgString = '%c%s - %s';\n args = [`color: ${levelColors[ev.level].browser};`, ...args];\n } else {\n msgString = `\\x1b[${levelColors[ev.level].terminal}m%s\\x1b[0m - %s`;\n }\n // we check if the fields object is not empty, otherwise its printed as <empty string>\n // or just \"\".\n if (hasFields) {\n msgString += ' %o';\n args.push(ev.fields);\n }\n\n console.log.apply(console, [msgString, ...args]);\n }\n\n flush() {\n return;\n }\n}\n"],"names":["LogLevelValue","LogLevel","isBrowser"],"mappings":";;;;AAQA,MAAM,cAAsC;AAAA,EAC1C,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,SAAS;AAAA,EAAA;AAAA,EAEX,OAAO;AAAA,IACL,UAAU;AAAA,IACV,SAAS;AAAA,EAAA;AAAA,EAEX,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,SAAS;AAAA,EAAA;AAAA,EAEX,OAAO;AAAA,IACL,UAAU;AAAA,IACV,SAAS;AAAA,EAAA;AAEb;AAEO,MAAM,iBAAsC;AAAA,EACzC;AAAA,EAER,YAAY,QAAiC;AAC3C,SAAK,SAAS,EAAE,GAAG,OAAA;AAAA,EACrB;AAAA,EAEA,MAAwB,CAAC,SAAS;AAChC,SAAK,QAAQ,CAAC,QAAQ;AACpB,UACEA,OAAAA,cAAe,IAAI,SAAsBC,OAAAA,SAAS,IAAI,KAAKD,qBAAc,KAAK,OAAO,YAAYC,OAAAA,SAAS,IAAI,GAC9G;AACA,aAAK,YAAY,GAAG;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,mBAAmB,KAA2B;AACpD,WAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,WAAW,OAAO,aAAa,OAAO,YAAY;AAAA,EACtG;AAAA,EAEA,YAAY,IAAc;AACxB,UAAM,YAAY,GAAG,UAAU,OAAO,KAAK,GAAG,MAAM,EAAE,SAAS;AAG/D,QAAI,CAAC,KAAK,OAAO,aAAa;AAC5B,UAAI,CAAC,KAAK,mBAAmB,EAAE,GAAG;AAChC,gBAAQ,IAAI,EAAE;AACd;AAAA,MACF;AACA,UAAI,MAAM,GAAG,GAAG,KAAK,MAAM,GAAG,OAAO;AACrC,UAAI,WAAW;AACb,eAAO,MAAM,KAAK,UAAU,GAAG,MAAM;AAAA,MACvC;AACA,cAAQ,IAAI,GAAG;AACf;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,mBAAmB,EAAE,GAAG;AAChC,UAAIC,mBAAW;AACb,gBAAQ,IAAI,QAAQ,UAAU,YAAYD,gBAAS,IAAI,EAAE,OAAO,KAAK,EAAE;AAAA,MACzE,OAAO;AACL,gBAAQ,IAAI,QAAQ,YAAYA,OAAAA,SAAS,IAAI,EAAE,QAAQ,cAAc,EAAE;AAAA,MACzE;AACA;AAAA,IACF;AAKA,QAAI,YAAY;AAChB,QAAI,OAAc,CAAC,GAAG,OAAO,GAAG,OAAO;AAEvC,QAAIC,mBAAW;AACb,kBAAY;AACZ,aAAO,CAAC,UAAU,YAAY,GAAG,KAAK,EAAE,OAAO,KAAK,GAAG,IAAI;AAAA,IAC7D,OAAO;AACL,kBAAY,QAAQ,YAAY,GAAG,KAAK,EAAE,QAAQ;AAAA,IACpD;AAGA,QAAI,WAAW;AACb,mBAAa;AACb,WAAK,KAAK,GAAG,MAAM;AAAA,IACrB;AAEA,YAAQ,IAAI,MAAM,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAAA,EACjD;AAAA,EAEA,QAAQ;AACN;AAAA,EACF;AACF;;"}