61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
|
|
|
|
|
|
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
|
|
}
|
|
}
|
|
} |