Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

@alt-javascript/logger

Language npm version License: MIT CI

Pluggable, config-driven logging for the @alt-javascript framework. Provides a category-based logger with configurable levels per category, multiple output backends, and a caching variant for test fixtures.

Inspired by SLF4J + Logback — the same LoggerFactory.getLogger(category) API used throughout the Spring ecosystem.

Part of the @alt-javascript monorepo.

Install

npm install @alt-javascript/logger

Quick Start

import { LoggerFactory } from '@alt-javascript/logger';
import { Boot } from '@alt-javascript/boot';
import { EphemeralConfig } from '@alt-javascript/config';

const config = new EphemeralConfig({
  logging: {
    level: {
      ROOT: 'info',
      'com.myapp.service': 'debug',   // category-specific level
    },
  },
});

Boot.boot({ config });

const logger = LoggerFactory.getLogger('com.myapp.service');
logger.debug('Detailed message');  // logged — category level is debug
logger.info('Normal message');     // logged
logger.warn('Warning message');    // logged
logger.verbose('Very detailed');   // not logged — below debug

Log Levels

Levels from most to least verbose: sillyverbosedebuginfowarnerror.

Configure per category hierarchy — com.myapp applies to all loggers whose name starts with com.myapp:

{
  "logging": {
    "level": {
      "ROOT": "warn",
      "com.myapp": "info",
      "com.myapp.repository": "debug"
    }
  }
}

CDI Autowiring

In CDI components, declare this.logger = null and it is autowired automatically:

class OrderService {
  constructor() {
    this.logger = null; // autowired — category defaults to the component name
  }

  processOrder(id) {
    this.logger.info(`Processing order ${id}`);
  }
}

Backends

Backend How to configure
Console (default) No configuration needed
Winston Boot.boot({ loggerFactory: new WinstonLoggerFactory(winston) })
Multi Boot.boot({ loggerFactory: new MultiLoggerFactory([...]) })
Caching (test) Boot.test({ config }) — suppresses output, stores log calls for assertion

Test Fixtures

Boot.test() installs CachingLoggerFactory, which stores log calls without printing them:

// test/fixtures/index.js
import { Boot } from '@alt-javascript/boot';
import config from 'config';

Boot.test({ config });

Spring / SLF4J Attribution

SLF4J / Logback concept @alt-javascript/logger equivalent
LoggerFactory.getLogger(Class) LoggerFactory.getLogger('category.name')
Logger hierarchy (parent categories) Category-prefix matching in config
Logger.debug(), .info(), .warn(), .error() Same method names
Log level configuration in logback.xml logging.level.* in config
@Slf4j field injection (Lombok) this.logger = null CDI autowiring

License

MIT