A simple logger for AngularJS 1.x with configurable log levels and optional debug integration.
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.
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
debugthat 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. 🎓
npm install angular-simple-loggerIf you don't need the debug module integration:
import 'angular-simple-logger/light';
// or
require('angular-simple-logger/light');import angular from 'angular';
import 'angular-simple-logger';
angular.module('myApp', ['nemLogging']);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!');
}]);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.nemSimpleLogger.doLog = false;// 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');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!');
});angular.module('myApp').config(function(nemDebugProvider) {
nemDebugProvider.debug.enable('myApp:*');
});| 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). |
The debug module, available as both a service and provider.
- Source converted from CoffeeScript to ES6
- Build system changed from Gulp to Rollup
- Now provides UMD + ESM bundles
debugupgraded to v4- Public API is unchanged
If you find this useful, consider sponsoring @nmccready.
MIT