Skip to content

Instantly share code, notes, and snippets.

@maciejcieslar
Created October 17, 2018 20:55
Show Gist options
  • Save maciejcieslar/a5e2de60039d1ba481232a41bd7f0167 to your computer and use it in GitHub Desktop.
Save maciejcieslar/a5e2de60039d1ba481232a41bd7f0167 to your computer and use it in GitHub Desktop.
interface Config {
transports?: Transport[];
level?: Level;
}
const defaultConfig: Config = {
transports: [new transports.console({ level: 'info' })],
level: 'info',
};
const createLogger = (unsafeConfig?: Config) => {
const config = { ...defaultConfig, ...unsafeConfig };
const log = (level: Level) => {
if (!isAllowed(config.level, level)) {
return (strings: TemplateStringsArray, ...expressions): void => {};
}
return (strings: TemplateStringsArray, ...expressions): void => {
return config.transports.forEach((transport) => {
if (!transport.isAllowed(level)) {
return null;
}
const content = strings.reduce((prev, curr, index) => {
const formatted = transport.format(expressions[index] || '');
return `${prev}${curr}${formatted}`;
}, '');
const message = transport.getMessage({
level,
message: content,
date: new Date(),
location: getLocation(4),
});
return transport.log({ level, message });
});
};
};
return {
log,
emerg: log('emerg'),
alert: log('alert'),
crit: log('crit'),
error: log('error'),
warning: log('warning'),
notice: log('notice'),
info: log('info'),
debug: log('debug'),
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment