UNPKG

@8select/strulo

Version:

Log messages in a structured format.

65 lines (56 loc) 1.55 kB
// @flow import createLogger from 'debug' import { getLevelName, logLevels } from './log-levels' import { formatMessage } from './message' import type { LogLevel } from './log-levels' import type { Message } from './message' const logFunctions = Object.keys(logLevels).reduce(buildLogFunctionPerLogLevel, {}) export const debug = (message: Message): void => { logFunctions.debug(message) } export const info = (message: Message): void => { logFunctions.info(message) } export const notice = (message: Message): void => { logFunctions.notice(message) } export const warning = (message: Message): void => { logFunctions.warning(message) } export const error = (message: Message): void => { logFunctions.error(message) } export const critical = (message: Message): void => { logFunctions.critical(message) } export const alert = (message: Message): void => { logFunctions.alert(message) } export const emergency = (message: Message): void => { logFunctions.emergency(message) } function buildLogFunctionPerLogLevel(previousObjectWithLogFunctions: Object, currentLogLevel: LogLevel) { return Object.assign( previousObjectWithLogFunctions, {}, { [getLevelName(currentLogLevel).toLowerCase()]: log(currentLogLevel), } ) } function log(level: LogLevel): Function { const logger = createLogger(getLevelName(level)) return function(message: Message): void { logger(formatMessage(level, message)) } } export default { debug, info, notice, warning, error, critical, alert, emergency, }