Skip to content

brickhouse-tech/angular-simple-logger

Repository files navigation

angular-simple-logger

Tests npm npm

A simple logger for AngularJS 1.x with configurable log levels and optional debug integration.

Why does this still exist?

Good question. AngularJS hit end-of-life in 2022 and yet this package still pulls ~7,000 downloads per week (365k+ per year). That's because the real world doesn't care about deprecation notices — enterprise apps built on AngularJS are still running in production, and they still need their dependencies maintained.

This library is a dependency of angular-google-maps and other AngularJS packages that are, for better or worse, still in active use. As long as people are downloading it, we'll keep the lights on: modern builds, working CI, and security patches.

What about Angular 2+?

No plans — and here's why it doesn't make sense:

This library exists because AngularJS 1.x had its own dependency injection system and module lifecycle. You couldn't just import a logger — you needed it wrapped as an AngularJS service/provider to play nice with $log, $provide.decorator, and the digest cycle. That's what nemLogging does.

Angular 2+ doesn't have this problem. Modern Angular uses standard ES modules and TypeScript imports. There's no special DI wrapper needed to use a logging library — you just import it directly. The entire reason this package exists is an AngularJS-specific constraint that no longer applies.

If you're on Angular 2+ (or any modern framework), use these instead:

  • debug-fabulous (GitHub) — lazy-eval wrapper around debug that won't eat your CPU when disabled. Drop-in replacement with zero framework coupling.
  • debug (GitHub) — the OG. Tiny, namespaced, colored output. Works everywhere.
// That's it. No module wrapper needed.
import debug from 'debug-fabulous';
const log = debug('myApp:component');
log('just works');

If you've migrated to modern Angular, you've already outgrown this package. Congratulations. 🎓

Installation

npm install angular-simple-logger

Light version (no debug dependency)

If you don't need the debug module integration:

import 'angular-simple-logger/light';
// or
require('angular-simple-logger/light');

Usage

As a module dependency

import angular from 'angular';
import 'angular-simple-logger';

angular.module('myApp', ['nemLogging']);

Basic logging

angular.module('myApp').controller('MyCtrl', ['nemSimpleLogger', function(nemSimpleLogger) {
  // Default level is 'error' — only error and log will output
  nemSimpleLogger.error('This will show');
  nemSimpleLogger.debug('This will NOT show');

  // Enable all levels
  nemSimpleLogger.currentLevel = nemSimpleLogger.LEVELS.debug;
  nemSimpleLogger.debug('Now this shows!');
}]);

Log levels

Levels are ordered: debug (0) < info (1) < warn (2) < error (3) < log (4).

Setting currentLevel to a value means that level and all higher levels will output.

nemSimpleLogger.currentLevel = nemSimpleLogger.LEVELS.warn;
// warn, error, and log will output. debug and info will not.

Disable all logging

nemSimpleLogger.doLog = false;

Spawn independent loggers

// From an existing logger object
const childLogger = nemSimpleLogger.spawn();
childLogger.currentLevel = childLogger.LEVELS.debug; // independent level

// With debug namespace (full version only)
const dbgLogger = nemSimpleLogger.spawn('myApp:worker');
dbgLogger.debug('colored debug output via visionmedia/debug');

Decorate $log

angular.module('myApp').config(function($provide, nemSimpleLoggerProvider) {
  $provide.decorator(...nemSimpleLoggerProvider.decorator);
});

// Now $log has level filtering:
angular.module('myApp').run(function($log) {
  $log.debug('works with levels!');
});

Enable debug namespaces

angular.module('myApp').config(function(nemDebugProvider) {
  nemDebugProvider.debug.enable('myApp:*');
});

API

nemSimpleLogger

Property/Method Description
debug(...) Log at debug level
info(...) Log at info level
warn(...) Log at warn level
error(...) Log at error level
log(...) Log at log level
currentLevel Current minimum log level (default: LEVELS.error)
doLog Boolean to enable/disable all logging (default: true)
LEVELS Object with level constants: { debug: 0, info: 1, warn: 2, error: 3, log: 4 }
spawn([logger|namespace]) Create a child logger. Pass a string for debug namespace (full version).

nemDebug (full version only)

The debug module, available as both a service and provider.

Migrating from 0.1.x

  • Source converted from CoffeeScript to ES6
  • Build system changed from Gulp to Rollup
  • Now provides UMD + ESM bundles
  • debug upgraded to v4
  • Public API is unchanged

Sponsor

If you find this useful, consider sponsoring @nmccready.

License

MIT

About

Basic logger with level logging which can also be independent.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 5