Newer
Older
WeComCompanyPlugin / logger.js
/**
 * Structured logging for WeCom plugin
 */
const LEVELS = {
  debug: 10,
  info: 20,
  warn: 30,
  error: 40,
  silent: 100,
};

function getEnvLogLevel() {
  const raw = (process.env.WECOM_LOG_LEVEL || process.env.LOG_LEVEL || "info").toLowerCase();
  return Object.prototype.hasOwnProperty.call(LEVELS, raw) ? raw : "info";
}

export class Logger {
  prefix;
  level;
  constructor(prefix = "[wecom]", level = getEnvLogLevel()) {
    this.prefix = prefix;
    this.level = level;
  }
  log(level, message, context) {
    if (LEVELS[level] < LEVELS[this.level]) {
      return;
    }
    const timestamp = new Date().toISOString();
    const contextStr = context ? ` ${JSON.stringify(context)}` : "";
    const logMessage = `${timestamp} ${level.toUpperCase()} ${this.prefix} ${message}${contextStr}`;
    switch (level) {
      case "debug":
        console.debug(logMessage);
        break;
      case "info":
        console.info(logMessage);
        break;
      case "warn":
        console.warn(logMessage);
        break;
      case "error":
        console.error(logMessage);
        break;
    }
  }
  debug(message, context) {
    this.log("debug", message, context);
  }
  info(message, context) {
    this.log("info", message, context);
  }
  warn(message, context) {
    this.log("warn", message, context);
  }
  error(message, context) {
    this.log("error", message, context);
  }
  child(subPrefix) {
    return new Logger(`${this.prefix}:${subPrefix}`, this.level);
  }
}
// Default logger instance
export const logger = new Logger();