UNPKG

actionhero

Version:

The reusable, scalable, and quick node.js API server for stateless and stateful applications

63 lines (54 loc) 1.84 kB
import * as winston from "winston"; import { config } from "./config"; import { utils } from "./utils"; // exported as `import { loggers } from "actionhero"` export let loggers: winston.Logger[] = []; config.general.paths.log.forEach((p: string) => { try { utils.fileUtils.createDirSafely(p); } catch (error) { if (error.code !== "EEXIST") { throw error; } } }); loggers = config.logger.loggers.map((loggerBuilder: Function) => { const resolvedLogger = loggerBuilder(config); return winston.createLogger(resolvedLogger); }); export type ActionheroLogLevel = | "emerg" | "alert" | "crit" | "error" | "warning" | "notice" | "info" | "debug"; /** * Log a message, with optional metadata. The message can be logged to a number of locations (stdio, files, etc) as configured via config/logger.js * * The most basic use. Will assume 'info' as the severity: `log('hello')` * Custom severity: `log('OH NO!', 'warning')` * Custom severity with a metadata object: `log('OH NO, something went wrong', 'warning', { error: new Error('things are busted') })` * * The default log levels are: `emerg: 0, alert: 1, crit: 2, error: 3, warning: 4, notice: 5, info: 6, debug: 7`. * Logging levels in winston conform to the severity ordering specified by RFC5424: severity of all levels is assumed to be numerically ascending from most important to least important. * Learn more at https://github.com/winstonjs/winston */ export function log( message: string, severity: ActionheroLogLevel = "info", data?: any, ) { loggers.map((logger) => { if (logger.levels[severity] === undefined) { severity = "info"; } const args = [severity, message]; if (data !== null && data !== undefined) { args.push(data); } return logger.log.apply(logger, args); }); }