CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-loglevel

Minimal lightweight logging for JavaScript, adding reliable log level methods to any available console.log methods

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

level-control.mddocs/

Level Control

Manage logging levels with persistence, providing fine-grained control over which messages are displayed across different environments.

Capabilities

setLevel

/**
 * 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");

getLevel

/**
 * 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");
}

setDefaultLevel

/**
 * 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
}

resetLevel

/**
 * 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();
}

enableAll

/**
 * 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

disableAll

/**
 * 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
}

Level Hierarchy

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 output

Usage 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 1

Persistence

Levels are automatically persisted across page reloads and sessions:

  • Primary: localStorage (when available)
  • Fallback: Session cookies
  • Node.js: No persistence (manual configuration required)
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

docs

basic-logging.md

index.md

level-control.md

multi-logger.md

plugins.md

tile.json