UNPKG

@axiomhq/logging

Version:
1 lines 4.55 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,EACX;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;AAEO,MAAM,iBAAsC;AAAA,EAGjD,YAAY,QAAiC;AAFrC;AAMR,+BAAwB,CAAC,SAAS;AAC3B,WAAA,QAAQ,CAAC,QAAQ;AACpB,YACEA,OAAe,cAAA,IAAI,SAAsBC,OAAAA,SAAS,IAAI,KAAKD,qBAAc,KAAK,OAAO,YAAYC,OAAS,SAAA,IAAI,GAC9G;AACA,eAAK,YAAY,GAAG;AAAA,QACtB;AAAA,MAAA,CACD;AAAA,IAAA;AAVI,SAAA,SAAS,EAAE,GAAG;EACrB;AAAA,EAYQ,mBAAmB,KAA2B;AAC7C,WAAA,OAAO,QAAQ,YAAY,QAAQ,QAAQ,WAAW,OAAO,aAAa,OAAO,YAAY;AAAA,EACtG;AAAA,EAEA,YAAY,IAAc;AAClB,UAAA,YAAY,GAAG,UAAU,OAAO,KAAK,GAAG,MAAM,EAAE,SAAS;AAG3D,QAAA,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;AACL,gBAAA,IAAI,QAAQ,UAAU,YAAYD,gBAAS,IAAI,EAAE,OAAO,KAAK,EAAE;AAAA,MAAA,OAClE;AACG,gBAAA,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;AACD,kBAAA;AACL,aAAA,CAAC,UAAU,YAAY,GAAG,KAAK,EAAE,OAAO,KAAK,GAAG,IAAI;AAAA,IAAA,OACtD;AACL,kBAAY,QAAQ,YAAY,GAAG,KAAK,EAAE,QAAQ;AAAA,IACpD;AAGA,QAAI,WAAW;AACA,mBAAA;AACR,WAAA,KAAK,GAAG,MAAM;AAAA,IACrB;AAEA,YAAQ,IAAI,MAAM,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAAA,EACjD;AAAA,EAEA,QAAQ;AACN;AAAA,EACF;AACF;;"}