CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-signale

Hackable console logger for Node.js applications with 17 out-of-the-box logger types and advanced features including integrated timers, scoped loggers, secrets filtering, and custom pluggable loggers.

Pending
Overview
Eval results
Files

configuration.mddocs/

Configuration & Settings

Global and instance-level configuration options for customizing logger behavior, appearance, and output format. Signale provides flexible configuration through package.json global settings and per-instance options.

Capabilities

Instance Configuration

Configure individual Signale instances with runtime settings.

/**
 * Update the configuration of a Signale instance
 * @param settingsObj - Configuration options object
 */
function config(settingsObj: ConfigOptions): void;

/**
 * Get the current package.json configuration
 */
readonly packageConfiguration: object;

interface ConfigOptions {
  displayScope?: boolean;      // Show scope names in output (default: true)
  displayBadge?: boolean;      // Show logger badges/icons (default: true) 
  displayDate?: boolean;       // Show date in output (default: false)
  displayFilename?: boolean;   // Show calling filename (default: false)
  displayLabel?: boolean;      // Show logger labels (default: true)
  displayTimestamp?: boolean;  // Show timestamp in output (default: false)
  underlineLabel?: boolean;    // Underline logger labels (default: true)
  underlineMessage?: boolean;  // Underline log messages (default: false)
  underlinePrefix?: boolean;   // Underline message prefixes (default: false)
  underlineSuffix?: boolean;   // Underline message suffixes (default: false)
  uppercaseLabel?: boolean;    // Display labels in uppercase (default: false)
}

Global Configuration

Configure Signale globally through package.json settings.

package.json Configuration:

{
  "signale": {
    "displayScope": true,
    "displayBadge": true,
    "displayDate": false,
    "displayFilename": false,
    "displayLabel": true,
    "displayTimestamp": false,
    "underlineLabel": true,
    "underlineMessage": false,
    "underlinePrefix": false,
    "underlineSuffix": false,
    "uppercaseLabel": false
  }
}

Runtime Configuration

Change configuration settings at runtime for existing instances.

Usage Examples:

const signale = require('signale');

// Default appearance
signale.success('Default configuration');
// Output: ✔  success  Default configuration

// Update configuration
signale.config({
  displayTimestamp: true,
  displayDate: true,
  displayFilename: true,
  uppercaseLabel: true
});

signale.success('Updated configuration');
// Output: [2023-12-07] [14:30:25] [index.js] › ✔  SUCCESS  Updated configuration

// Multiple configuration changes
signale.config({
  underlineMessage: true,
  underlineLabel: true,
  displayBadge: false
});

signale.info('Styled message');
// Output: [2023-12-07] [14:30:26] [index.js] › INFO  Styled message
// (with underlines applied)

Constructor Configuration

Set configuration when creating new Signale instances.

Usage Examples:

const { Signale } = require('signale');

// Instance with custom configuration
const styledLogger = new Signale({
  config: {
    displayDate: true,
    displayTimestamp: true,
    uppercaseLabel: true,
    underlineMessage: true
  }
});

styledLogger.info('Custom styled logger');
// Output: [2023-12-07] [14:30:25] › ℹ  INFO  Custom styled logger (underlined)

// Minimal configuration
const minimalLogger = new Signale({
  config: {
    displayBadge: false,
    displayLabel: false
  }
});

minimalLogger.success('Minimal output');
// Output: Minimal output (no badge or label)

Display Options

Control what elements appear in log output.

Usage Examples:

const { Signale } = require('signale');

// Show all available metadata
const verboseLogger = new Signale({
  config: {
    displayScope: true,
    displayBadge: true,
    displayDate: true,
    displayFilename: true,
    displayLabel: true,
    displayTimestamp: true
  }
});

const scoped = verboseLogger.scope('app', 'module');
scoped.info('Verbose logging enabled');
// Output: [2023-12-07] [14:30:25] [config-example.js] [app] [module] › ℹ  info  Verbose logging enabled

// Hide all metadata  
const cleanLogger = new Signale({
  config: {
    displayScope: false,
    displayBadge: false,
    displayDate: false,
    displayFilename: false,
    displayLabel: false,
    displayTimestamp: false
  }
});

cleanLogger.error('Clean output');
// Output: Clean output (no decorations)

Text Styling Options

Control text styling and formatting.

Usage Examples:

const { Signale } = require('signale');

// Underline everything
const underlinedLogger = new Signale({
  config: {
    underlineLabel: true,
    underlineMessage: true,
    underlinePrefix: true,
    underlineSuffix: true
  }
});

underlinedLogger.success({
  prefix: '[deploy]',
  message: 'Application deployed successfully', 
  suffix: '(v1.2.0)'
});
// Output: [deploy] ✔  success  Application deployed successfully (v1.2.0)
// (with underlines applied to label, message, prefix, and suffix)

// Uppercase labels
const uppercaseLogger = new Signale({
  config: {
    uppercaseLabel: true
  }
});

uppercaseLogger.warn('Uppercase labels enabled');
// Output: ⚠  WARNING  Uppercase labels enabled

Configuration Inheritance

Configuration inheritance patterns with scoped loggers.

Usage Examples:

const { Signale } = require('signale');

// Parent with configuration
const parent = new Signale({
  config: {
    displayTimestamp: true,
    uppercaseLabel: true
  }
});

// Scoped logger inherits configuration
const child = parent.scope('module');

parent.info('Parent logger');
// Output: [14:30:25] › ℹ  INFO  Parent logger

child.success('Child logger');  
// Output: [14:30:25] [module] › ✔  SUCCESS  Child logger

// Override configuration in child
child.config({
  displayTimestamp: false,
  displayDate: true
});

child.warn('Modified child logger');
// Output: [2023-12-07] [module] › ⚠  WARNING  Modified child logger

File and Timestamp Display

Control filename and time information display.

Usage Examples:

// config-demo.js
const { Signale } = require('signale');

const timestampLogger = new Signale({
  config: {
    displayDate: true,
    displayTimestamp: true,
    displayFilename: true
  }
});

timestampLogger.info('Time and file information');
// Output: [2023-12-07] [14:30:25] [config-demo.js] › ℹ  info  Time and file information

// Date only
const dateLogger = new Signale({
  config: {
    displayDate: true,
    displayTimestamp: false,
    displayFilename: false
  }
});

dateLogger.success('Date only');
// Output: [2023-12-07] › ✔  success  Date only

// Filename only
const fileLogger = new Signale({
  config: {
    displayDate: false,
    displayTimestamp: false,
    displayFilename: true
  }
});

fileLogger.warn('Filename only');
// Output: [config-demo.js] › ⚠  warning  Filename only

Configuration Validation

Signale handles invalid configuration gracefully.

Usage Examples:

const { Signale } = require('signale');

// Invalid options are ignored
const logger = new Signale({
  config: {
    displayBadge: true,
    invalidOption: 'ignored',    // This will be ignored
    displayLabel: 'not-boolean', // This will be ignored
    displayScope: true           // This will be applied
  }
});

logger.info('Configuration with invalid options');
// Output: [scope] › ℹ  info  Configuration with invalid options (works normally)

// Null/undefined config is handled safely
const safeLogger = new Signale({
  config: null  // No error thrown
});

safeLogger.success('Safe configuration');
// Output: ✔  success  Safe configuration (uses defaults)

Dynamic Configuration

Change configuration multiple times during runtime.

Usage Examples:

const signale = require('signale');

// Start with default configuration
signale.info('Default style');
// Output: ℹ  info  Default style

// Switch to verbose mode
signale.config({
  displayDate: true,
  displayTimestamp: true,
  displayFilename: true
});

signale.info('Verbose mode');
// Output: [2023-12-07] [14:30:25] [dynamic-config.js] › ℹ  info  Verbose mode

// Switch to minimal mode
signale.config({
  displayDate: false,
  displayTimestamp: false, 
  displayFilename: false,
  displayBadge: false,
  displayLabel: false
});

signale.info('Minimal mode');
// Output: Minimal mode

// Back to styled mode
signale.config({
  displayBadge: true,
  displayLabel: true,
  uppercaseLabel: true,
  underlineMessage: true
});

signale.success('Styled mode');
// Output: ✔  SUCCESS  Styled mode (with underline)

Install with Tessl CLI

npx tessl i tessl/npm-signale

docs

advanced-features.md

configuration.md

core-logging.md

custom-loggers.md

index.md

scoped-loggers.md

timers.md

tile.json