| | |
| | | |
| | | ///////////////////////////////////////////////////////////////////////// |
| | | |
| | | const LEVELS = {debug: 10, info: 20, warn: 30, error: 40} |
| | | const DEFAULT_LEVEL = "info" |
| | | |
| | | // level configured from settings (see settings.js); env LOG_LEVEL overrides it |
| | | let settingsLevel = null |
| | | |
| | | module.exports = { |
| | | debug: msg => log("DEBUG", msg), |
| | | info: msg => log("INFO", msg), |
| | | warn: msg => log("WARN", msg), |
| | | error: msg => log("ERROR", msg), |
| | | setLevel, |
| | | level: currentLevel, |
| | | } |
| | | |
| | | ///////////////////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | | * Set the level from settings. The LOG_LEVEL env var still takes precedence. |
| | | */ |
| | | function setLevel (level) { |
| | | settingsLevel = level ? level.toString().trim().toLowerCase() : null |
| | | } |
| | | |
| | | /** |
| | | * Resolve the active log level: LOG_LEVEL env var > settings level > "info". |
| | | */ |
| | | function currentLevel () { |
| | | const level = process.env.LOG_LEVEL || settingsLevel || DEFAULT_LEVEL |
| | | return level.toString().trim().toLowerCase() |
| | | } |
| | | |
| | | function log (level, msg) { |
| | | const threshold = currentLevel() |
| | | if (threshold === "silent" || threshold === "off") return |
| | | if (LEVELS[level.toLowerCase()] < (LEVELS[threshold] ?? LEVELS[DEFAULT_LEVEL])) return |
| | | |
| | | if (!_.isString(msg)) { |
| | | if (msg.message) { |
| | | msg = msg.message |