Skip to content

Commit

Permalink
feat(logger): split logger implementation into separate files and cre…
Browse files Browse the repository at this point in the history
…ate console transport
  • Loading branch information
karinasigartau0798 authored and cipak committed Mar 8, 2022
1 parent fb4d314 commit 21a39ad
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 34 deletions.
41 changes: 7 additions & 34 deletions src/logger.js
Original file line number Diff line number Diff line change
@@ -1,40 +1,13 @@
import {safeJsonStringify} from './utils';
import {createLogger} from './logger/logger';
import consoleTransport from './logger/consoleTransport';

const LEVELS = {
error: 1,
warn: 2,
info: 3,
debug: 4,
};
const logger = createLogger();

let currentLevel = 'error';
logger.setLevel('error');

const format = (level, resourceType, resourceID, action, message, error) => {
const timestamp = new Date().toISOString();
let msgString = message;

if (Array.isArray(message)) {
msgString = message.map((item) => (
(typeof item === 'string' && item)
|| safeJsonStringify(item, (key, value) => (
(value instanceof MediaStream && `MediaStream([${value.getTracks().map((track) => track.kind)}])`)
|| value
), 2)
)).join(' ');
}

return `${timestamp} ${level} ${resourceType} ${resourceID} ${action} ${msgString} ${error ? ` ${error.stack || error}` : ''}`;
};

const show = (level) => (LEVELS[level] <= LEVELS[currentLevel]);

const logger = {
setLevel: (level) => { currentLevel = level; },
info: (...args) => show('info') && console.info(format('info', ...args)),
warn: (...args) => show('warn') && console.warn(format('warn', ...args)),
error: (...args) => show('error') && console.error(format('error', ...args)),
debug: (...args) => show('debug') && console.debug(format('debug', ...args)),
};
if (process.env.NODE_ENV !== 'production') {
logger.addTransport(consoleTransport());
}

if (typeof window !== 'undefined') {
window.webexSDKAdapterSetLogLevel = (level) => logger.setLevel(level);
Expand Down
12 changes: 12 additions & 0 deletions src/logger/consoleTransport.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const consoleTransport = (prefix) => ((
timestamp, level, resourceType, resourceID, action, message, error,
) => {
const args = [timestamp.toISOString(), level, resourceType, resourceID, action, message];

if (error) { args.push(error); }
if (prefix) { args.unshift(prefix); }

console[level](...args);
});

export default consoleTransport;
55 changes: 55 additions & 0 deletions src/logger/logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import {safeJsonStringify} from '../utils';

export const LEVELS = {
error: 1,
warn: 2,
info: 3,
debug: 4,
};

export const createLogger = () => {
const transports = [];
let currentLevel = 'error';

const log = (level, ...rest) => {
if (LEVELS[level] <= LEVELS[currentLevel]) {
const timestamp = new Date();

for (const transport of transports) {
transport(timestamp, level, ...rest);
}
}
};

const logger = {
addTransport: (transportFunction) => { transports.push(transportFunction); },
setLevel: (level) => { currentLevel = level; },
info: (...args) => log('info', ...args),
warn: (...args) => log('warn', ...args),
error: (...args) => log('error', ...args),
debug: (...args) => log('debug', ...args),
};

return logger;
};

export const format = (timestamp, level, resourceType, resourceID, action, message, error) => {
let msgString = message;

if (Array.isArray(message)) {
msgString = message.map((item) => (
(typeof item === 'string' && item)
|| safeJsonStringify(item, (key, value) => (
(value instanceof MediaStream && `MediaStream([${value.getTracks().map((track) => track.kind)}])`)
|| value
), 2)
)).join(' ');
}

return `${timestamp.toISOString()} ${level} ${resourceType} ${resourceID} ${action} ${msgString} ${error ? ` ${error.stack || error}` : ''}`;
};

export default {
createLogger,
format,
};

0 comments on commit 21a39ad

Please sign in to comment.