@alt-javascript/logger
v3.0.7
Published
A simple configurable logging facade for javascript.
Downloads
375
Maintainers
Readme
@alt-javascript/logger
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/loggerQuick 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 debugLog Levels
Levels from most to least verbose: silly → verbose → debug → info → warn → error.
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
