Minimal lightweight logging for JavaScript, adding reliable log level methods to any available console.log methods
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Manage logging levels with persistence, providing fine-grained control over which messages are displayed across different environments.
/**
* Set the current logging level
* Disables all logging below the specified level
* @param {LogLevelDesc} level - Level as string, number, or constant
* @param {boolean} persist - Whether to persist level (default: true)
* @throws {TypeError} When invalid level is provided
*/
setLevel(level: LogLevelDesc, persist?: boolean): void;
// Valid level descriptors
type LogLevelDesc =
| 0 | 1 | 2 | 3 | 4 | 5 // Numbers
| 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent' // Lowercase strings
| 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'SILENT'; // Uppercase strings
// Level constants
interface LogLevel {
TRACE: 0;
DEBUG: 1;
INFO: 2;
WARN: 3;
ERROR: 4;
SILENT: 5;
}
// Level number type
type LogLevelNumbers = 0 | 1 | 2 | 3 | 4 | 5;Usage Examples:
import log from 'loglevel';
// String levels (case-insensitive)
log.setLevel("warn");
log.setLevel("ERROR");
// Numeric levels
log.setLevel(2); // INFO level
// Level constants
log.setLevel(log.levels.DEBUG);
// Disable persistence
log.setLevel("info", false);
// After setting to "warn", only warn and error messages show
log.debug("This won't appear");
log.warn("This will appear");
log.error("This will appear");/**
* Get current logging level as number
* Useful for level-based conditional logic
* @returns {LogLevelNumbers} Current level (0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=SILENT)
*/
getLevel(): LogLevelNumbers;Usage Examples:
import log from 'loglevel';
log.setLevel("info");
const currentLevel = log.getLevel(); // Returns 2
// Conditional logging based on level
if (log.getLevel() <= log.levels.DEBUG) {
const expensiveDebugData = generateDebugInfo();
log.debug("Debug data:", expensiveDebugData);
}
// Level comparison
if (log.getLevel() < log.levels.ERROR) {
log.warn("Non-critical warning message");
}/**
* Set default level without affecting persisted settings
* Used for initial configuration that users can override
* @param {LogLevelDesc} level - Level as string, number, or constant
*/
setDefaultLevel(level: LogLevelDesc): void;Usage Examples:
import log from 'loglevel';
// Application initialization
log.setDefaultLevel("warn"); // Default for production
// If user previously set a level, it stays active
// If no persisted level exists, uses "warn"
// Useful for library initialization
function initializeLibrary() {
log.setDefaultLevel("error"); // Libraries should be quiet by default
}/**
* Reset to default level and clear persisted level
* Restores initial logging configuration
*/
resetLevel(): void;Usage Examples:
import log from 'loglevel';
// User sets custom level
log.setLevel("trace");
// Later, reset to default
log.resetLevel(); // Returns to "warn" (or setDefaultLevel value)
// Clears localStorage/cookie persistence
// Useful for logout or session reset
function resetUserSession() {
log.resetLevel();
}/**
* Enable all logging (equivalent to setLevel("trace"))
* Shows maximum detail for debugging
* @param {boolean} persist - Whether to persist setting (default: true)
*/
enableAll(persist?: boolean): void;Usage Examples:
import log from 'loglevel';
// Development debugging
log.enableAll();
// Temporary debugging without persistence
log.enableAll(false);
// Console debugging session
// log.enableAll() - run this in browser console for full logging/**
* Disable all logging (equivalent to setLevel("silent"))
* Completely suppresses log output
* @param {boolean} persist - Whether to persist setting (default: true)
*/
disableAll(persist?: boolean): void;Usage Examples:
import log from 'loglevel';
// Production silence
log.disableAll();
// Temporary quiet mode
log.disableAll(false);
// Performance-critical sections
function performanceCriticalOperation() {
log.disableAll(false);
// ... intensive operations ...
log.setLevel("warn"); // Restore normal level
}Levels follow a strict hierarchy where higher levels include all lower levels:
TRACE (0) ← Most verbose
↓
DEBUG (1)
↓
INFO (2)
↓
WARN (3) ← Default level
↓
ERROR (4)
↓
SILENT (5) ← No outputUsage Examples:
import log from 'loglevel';
// Set to INFO level
log.setLevel("info");
// These will output:
log.info("Info message"); // ✓ Level 2
log.warn("Warning"); // ✓ Level 3
log.error("Error"); // ✓ Level 4
// These will be silent:
log.trace("Trace message"); // ✗ Level 0
log.debug("Debug info"); // ✗ Level 1Levels are automatically persisted across page reloads and sessions:
import log from 'loglevel';
// Persisted by default
log.setLevel("debug");
// Level survives page reload
// Temporary level (not persisted)
log.setLevel("trace", false);
// Resets to previous persistent level on reload
// Clear persistence
log.resetLevel();
// Removes stored level setting