import Logger from "./lib/logger.ts"; const logger = new Logger({ level: "debug" }); logger.error("Unable to fetch student"); logger.info("Hello from logger"); logger.warn("This is a warning"); logger.debug("This is a debug message"); // This won't be logged if level is set to 'info' logger.level("error"); logger.debug("This is a debug message"); // This won't be logged if level is set to 'info' or higher const simple_logger = new Logger({ level: "debug", format: "simple" }); simple_logger.error("Unable to fetch student"); simple_logger.info("Hello from logger"); simple_logger.warn("This is a warning"); simple_logger.debug("This is a debug message"); // This won't be logged if level is set to 'info' simple_logger.level("error"); simple_logger.debug("This is a debug message"); // This won't be logged if level is set to 'info' or higher const longLogger = new Logger({ time: "long", format: "simple" }); const shortLogger = new Logger({ time: "short", format: "simple" }); longLogger.info("This uses long time format"); shortLogger.info("This uses short time format"); // Demonstrate callerLevel functionality console.log("\n=== Caller Level Demo ==="); // Default callerLevel is 'warn' - only errors and warnings include caller info const defaultCallerLogger = new Logger({ format: "simple" }); console.log( "Default callerLevel (warn) - only errors and warnings show caller info:", ); defaultCallerLogger.error("Error with caller info"); defaultCallerLogger.warn("Warning with caller info"); defaultCallerLogger.info("Info without caller info"); defaultCallerLogger.debug("Debug without caller info"); // Set callerLevel to 'error' - only errors include caller info const errorOnlyLogger = new Logger({ format: "simple", callerLevel: "error" }); console.log("\nCallerLevel set to error - only errors show caller info:"); errorOnlyLogger.error("Error with caller info"); errorOnlyLogger.warn("Warning without caller info"); errorOnlyLogger.info("Info without caller info"); // Set callerLevel to 'debug' - all levels include caller info const allLevelsLogger = new Logger({ format: "simple", callerLevel: "debug" }); console.log("\nCallerLevel set to debug - all levels show caller info:"); allLevelsLogger.error("Error with caller info"); allLevelsLogger.warn("Warning with caller info"); allLevelsLogger.info("Info with caller info"); allLevelsLogger.debug("Debug with caller info"); // Set callerLevel to 'silent' - no levels include caller info const noneLogger = new Logger({ format: "simple", callerLevel: "silent" }); console.log("\nCallerLevel set to silent - no levels show caller info:"); noneLogger.error("Error without caller info"); noneLogger.warn("Warning without caller info"); noneLogger.info("Info without caller info"); // Demonstrate format string functionality (util.format style) console.log("\n=== Format String Demo ==="); const formatLogger = new Logger({ format: "simple", level: "debug" }); console.log("Format strings with various specifiers:"); // String formatting (%s) formatLogger.info("User %s logged in successfully", "john_doe"); // Number formatting (%d, %i, %f) formatLogger.warn("Database has %d connections, CPU usage: %f%%", 25, 84.3); formatLogger.debug("Processing item %i of %d", 42, 100); // JSON formatting (%j) const user = { name: "Alice", role: "admin", active: true }; const config = { timeout: 5000, retries: 3 }; formatLogger.info("User data: %j, Config: %j", user, config); // Mixed formatting formatLogger.error( "API call failed for user %s (ID: %d) with config %j", "bob", 1234, config, ); // Multiple arguments without format specifiers formatLogger.warn("System alert:", "High memory usage detected", { usage: "89%", threshold: "80%", }); // Literal percentage with %% formatLogger.info("Upload progress: 50%% complete"); // Edge cases formatLogger.debug("Values: %s, %s, %d", null, undefined, null); console.log("\nJSON format with same messages:"); const jsonFormatLogger = new Logger({ format: "json" }); jsonFormatLogger.info("User %s logged in with %d failed attempts", "alice", 2); jsonFormatLogger.warn("Config loaded: %j", { env: "production", debug: false });