Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including @xailabs/logger with all npm packages installed. Try it out:

var logger = require("@xailabs/logger")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

@xailabs/logger v1.2.0

@xailabs/logger

A class decorator that adds a logger object to instances. The logger object prepends a name to all of its output.

Very usefull when working with many different components, or sources of log messages in general.

Documentation: https://xailabs.github.io/logger/

Installation

npm install @xailabs/logger

or:

yarn add @xailabs/logger

Examples

Default usage with decorator syntax:

import {Component} from 'react';
import logger from '@xailabs/logger';
@logger('App')
class App extends Component {
     componentDidMount() {
         this.logger.warn('watch out!'); // logs a warning '[App] watch out!'
     }
}

Without decorator syntax

class App extends Component {
     componentDidMount() {
         this.logger.log('ok');
     }
}
logger('App')(App);

Without target - creates a new logger object

import {Component} from 'react';
import createLogger from '@xailabs/logger';
const logger = createLogger('App')();
logger.info('ok');

With log level. (See config.level in the docs for details)

const logLevel = process.env.NODE_ENV === 'development' ? 'debug' : 'info';
@logger('App', {level: logLevel})
class App extends Component {
     componentDidMount() {
        this.logger.log('ok'); // logs in both production and development
        this.logger.info('ok'); // logs in both production and development
        this.logger.warn('watch out!'); // only logs in development
     }
}

Using a function instead of a string as name - retrieves dynamic values

@logger(() => new Date().toISOString())
class App extends Component {
     componentDidMount() {
         this.log('ok'); // logs something like '[2017-08-01T16:37:14.444Z] ok'
     }
}   

Custom accessor

@logger('App', {accessor: 'logging'})
class App extends Component {
     componentDidMount() {
         this.logging.log('ok'); // access via this.logging
     }
}   

Magic 'this' accessor

@logger('App', {accessor: 'this'})
class App extends Component {
     componentDidMount() {
         this.log('ok'); // access via this.log() instead of this.something.log()
     }
}   

Custom log backend:

@logger('App', {backend: require('winston')})
class App extends Component {
     componentDidMount() {
         this.logger.log('ok'); // logs using winston instead of the console
     }
}   

Multiple log backends:

@logger('App', {backend: [window.console, require('winston'), anotherCustomLogger})
class App extends Component {
     componentDidMount() {
         this.logger.log('ok'); // logs to all the logger objects that have a "log" function
     }
}   

Metadata

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free