Files
IanKulin 01cc58aa7a fmt
2025-09-25 21:26:31 +08:00

103 lines
4.1 KiB
JavaScript

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 });