snowyu/abstract-logger.js

View on GitHub
README.md

Summary

Maintainability
Test Coverage
## abstract-logger [![npm](https://img.shields.io/npm/v/abstract-logger.svg)](https://npmjs.org/package/abstract-logger)

[![Build Status](https://img.shields.io/travis/snowyu/abstract-logger.js/master.svg)](http://travis-ci.org/snowyu/abstract-logger.js)
[![Code Climate](https://codeclimate.com/github/snowyu/abstract-logger.js/badges/gpa.svg)](https://codeclimate.com/github/snowyu/abstract-logger.js)
[![Test Coverage](https://codeclimate.com/github/snowyu/abstract-logger.js/badges/coverage.svg)](https://codeclimate.com/github/snowyu/abstract-logger.js/coverage)
[![downloads](https://img.shields.io/npm/dm/abstract-logger.svg)](https://npmjs.org/package/abstract-logger)
[![license](https://img.shields.io/npm/l/abstract-logger.svg)](https://npmjs.org/package/abstract-logger)


It is an abstract logger class.

## Usage


```coffee
Logger    = require 'abstract-logger'
inherits  = require 'inherits-ex'

class MyLogger
  inherits MyLogger, Logger

  constructor: ->super
  # The `_write` method need to be overwrote.
  _write: (str)->console.error str
```


```js
var logger = new MyLogger('test')
logger.log({
  message: '${name} - ${level}: here is a %s logging "${title}"!'
  , title: 'Today news'
  , level: log.levels.ERROR
}, 'pretty')
//or:
logger.log('${name} - ${level}: here is a %s logging "${title}"!', {
    title: 'Today news'
  , level: log.levels.ERROR
}, 'pretty')
//result: 'test - ERROR: here is a pretty logging "Today news"'
```

## API

* Methods:
  * `log(message[, context], args...)`:eg, log('hi ${user}', {user:'Mikey'})
    * message *(String)*: The message to show up
    * context *(Object)*: The optional context to escape the message against and pass the options to the log:
      * level *(Number|String)*: the logLevel. it will be translated to the string if it's a number
      * label *(String)*: the status label.
      * name *(String)*: the logger name if exists.
  * `log(context, args...)`:eg, log({message:'${name} - ${level}: hi ${user}', level:'info', user:'Mikey'})
    * The context to escape the message against and pass the options to the log:
      * message *(String)*: The message to show up
      * level *(Number|String)*: the logLevel. it will be translated to the string if it's a number
      * label *(String)*: the status label.
      * name *(String)*: the logger name if exists.
  * `write(...)`: write a new-line if no arguments.
  * `writeln(...)`: Same as `log.write()` but automatically appends a `\n` at the end
    of the message.
  * `emergency/alert/critical/error/warning/notice/info/debug/trace(message[, context], args...)`:
    * log the specified level message.


## TODO

+ Stream with transport (like https://github.com/winstonjs/winston)

## Changes

### v0.2

+ `enabled` *(Boolean)*: enable/disable the logger. default to true.
+ `levels` *(LogLevels)*: customizable logging levels
  + The default LogLevels:
    * SILENT:-1
    * EMERGENCY:0 system is unusable
    * ALERT:1     action must be taken immediately
    * CRITICAL:2  the system is in critical condition
    * ERROR:3     error condition
    * WARNING:4   warning condition
    * NOTICE:5    a normal but significant condition
    * INFO:6      a purely informational message
    * DEBUG:7     messages to debug an application
+ `level`: use the property to get/set the log level.
  * defaults to levels.ERROR.
  * set `'SILENT'` to mute the loglevel msg, it will still print it out if the msg without loglevel.
  * setter *(Nubmer|String)*: set the logging level via number or string.
  * getter *(String)*: get the logging level string, or get the level number via `_level` property.
* `log()`
  + level, name options to context.
  + log(context, args...)

## License

MIT