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.importdebugfrom'debug-fabulous';constlog=debug('myApp:component');log('just works');If you've migrated to modern Angular, you've already outgrown this package. Congratulations. 🎓
The original angular package (v1.8.3) is end-of-life and has 9 unpatched vulnerabilities (including high-severity ReDoS and XSS). Running npm audit will flag these with "No fix available."
@brickhouse-tech/angular-lts is a drop-in replacement with all 11 CVEs patched and a clean audit:
# Replace angular with the LTS fork
npm uninstall angular
npm install @brickhouse-tech/angular-ltsNo code changes required — same API, same module name, zero audit warnings.
npm install angular-simple-loggerIf you don't need the debug module integration:
import'angular-simple-logger/light';// orrequire('angular-simple-logger/light');importangularfrom'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 outputnemSimpleLogger.error('This will show');nemSimpleLogger.debug('This will NOT show');// Enable all levelsnemSimpleLogger.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 objectconstchildLogger=nemSimpleLogger.spawn();childLogger.currentLevel=childLogger.LEVELS.debug;// independent level// With debug namespace (full version only)constdbgLogger=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