feat: configurable log levels

This commit is contained in:
adamdottv
2025-07-09 10:00:03 -05:00
parent ca8ce88354
commit 53f8e7850e
13 changed files with 129 additions and 20 deletions

View File

@@ -1,8 +1,35 @@
import path from "path"
import fs from "fs/promises"
import { Global } from "../global"
import z from "zod"
export namespace Log {
export const Level = z.enum(["DEBUG", "INFO", "WARN", "ERROR"]).openapi({ ref: "LogLevel", description: "Log level" })
export type Level = z.infer<typeof Level>
const levelPriority: Record<Level, number> = {
DEBUG: 0,
INFO: 1,
WARN: 2,
ERROR: 3,
}
let currentLevel: Level = "INFO"
export function setLevel(level: Level) {
currentLevel = level
}
export function getLevel(): Level {
return currentLevel
}
function shouldLog(level: Level): boolean {
return levelPriority[level] >= levelPriority[currentLevel]
}
export type Logger = {
debug(message?: any, extra?: Record<string, any>): void
info(message?: any, extra?: Record<string, any>): void
error(message?: any, extra?: Record<string, any>): void
warn(message?: any, extra?: Record<string, any>): void
@@ -23,6 +50,7 @@ export namespace Log {
export interface Options {
print: boolean
level?: Level
}
let logpath = ""
@@ -85,14 +113,25 @@ export namespace Log {
return [next.toISOString().split(".")[0], "+" + diff + "ms", prefix, message].filter(Boolean).join(" ") + "\n"
}
const result: Logger = {
debug(message?: any, extra?: Record<string, any>) {
if (shouldLog("DEBUG")) {
process.stderr.write("DEBUG " + build(message, extra))
}
},
info(message?: any, extra?: Record<string, any>) {
process.stderr.write("INFO " + build(message, extra))
if (shouldLog("INFO")) {
process.stderr.write("INFO " + build(message, extra))
}
},
error(message?: any, extra?: Record<string, any>) {
process.stderr.write("ERROR " + build(message, extra))
if (shouldLog("ERROR")) {
process.stderr.write("ERROR " + build(message, extra))
}
},
warn(message?: any, extra?: Record<string, any>) {
process.stderr.write("WARN " + build(message, extra))
if (shouldLog("WARN")) {
process.stderr.write("WARN " + build(message, extra))
}
},
tag(key: string, value: string) {
if (tags) tags[key] = value