export namespace Log { var currentLevel: Level = "INFO" if (process.env.NODE_ENV !== 'production') { currentLevel = "DEBUG" } export type Level = "ERROR" | "WARN" | "INFO" | "DEBUG" export function setLevel(level: Level) { currentLevel = level } export interface LogArgs { [key: string]: string } export function Error(message: string, extras?: LogArgs) { doLog("ERROR", message, extras) } export function Warn(message: string, extras?: LogArgs) { doLog("WARN", message, extras) } export function Info(message: string, extras?: LogArgs) { doLog("INFO", message, extras) } export function Debug(message: string, extras?: LogArgs) { doLog("DEBUG", message, extras) } function doLog(level: Level, message: string, extras?: LogArgs) { var logLine = `[${level}] ${message}` if (extras) { Object.keys(extras).forEach((key) => { logLine = logLine + ` ${key}=${extras[key]}` }) } if (levelToNumber(level) >= levelToNumber(currentLevel)) { console.log(logLine) } } function levelToNumber(level: Level): number { switch (level) { case "DEBUG": return 0 case "INFO": return 1 case "ERROR": return 2 case "WARN": return 3 } } }