项目作者: ahiipsa

项目描述 :
lightweight logging library
高级语言: TypeScript
项目地址: git://github.com/ahiipsa/zerg.git
创建时间: 2016-07-08T06:47:34Z
项目社区:https://github.com/ahiipsa/zerg

开源协议:

下载


Build Status
Coverage Status
npm version
npm downloads

Zerg

Lightweight logging library for apps and libs

Futures

  • Zero dependencies
  • TypeScript support
  • Easy to use
  • Custom listeners/transports
  • Support Node.js and Browsers

Getting started

Installation

npm i --save zerg

or

yarn add zerg

Usage

Make module logger.js:

  1. import zerg from 'zerg';
  2. import {
  3. consoleNodeColorful,
  4. consoleBrowserColorful,
  5. } from 'zerg/dist/transports';
  6. const logger = zerg.createLogger();
  7. // Add console logger
  8. const listener = zerg.createListener({
  9. handler: consoleBrowserColorful, // for browser
  10. // handler: consoleNodeColorful, // for node
  11. });
  12. logger.addListener(listener);
  13. export default logger;

Make your module and import logger.js:

  1. import logger from './logger';
  2. const log = logger('moduleName');
  3. log.verbose('verbose message');
  4. log.debug('debug message');
  5. log.info('info message');
  6. log.warn('warn message');
  7. log.error('error message', {foo: 'bar'});

Result:

ScreenShot

API

Types

  1. type TExtendedData = Record<string, any>;
  1. type TLogMessage = {
  2. timestamp: number;
  3. loggerName: string;
  4. moduleName: string;
  5. level: TLogLevel;
  6. message: string;
  7. extendedData?: TExtendedData
  8. };
  1. type LogLevel = 'verbose' | 'debug' | 'info' | 'warn' | 'error';
  1. type Listener = (log: TLogMessage) => void;

zerg.createLogger(): Logger - Create logger instance

zerg.createListener(params): LogListener - Create listener for logger

  • params.handler: (logMessage: TLogMessage) => void;
  • params.filter?: (logMessage: TLogMessage) => boolean; (optional)
  • params.levels?: LogLevel; (optional)

logger.addListener(listener: LogListener)

  1. import zerg from 'zerg';
  2. const logger = zerg.createLogger();
  3. const listener = zerg.createListener({
  4. handler: (logMessage) => console.log(logMessage),
  5. levels: ['info'], // listen only `info` level
  6. });
  7. logger.addListener(listener);
  8. logger.module('myModule').info('Info message', {foo: 'bar'});
  9. logger.module('myModule').warn('Warn message', {bar: 'baz'});
  10. logger.module('myModule').error('Error message');
  11. /* console
  12. {
  13. timestamp: 1467967421933,
  14. level: 'info',
  15. moduleName: 'myModule',
  16. message: 'Info message',
  17. extendedData: {foo: 'bar'},
  18. }
  19. */

Use filter - Listen messages only from “Sarah” module

  1. import zerg from 'zerg';
  2. const logger = zerg.createLogger();
  3. const listener = zerg.createListener({
  4. handler: (logMessage) => console.log(logMessage),
  5. filter: (logMessage) => logMessage.moduleName === 'Sarah', // listen messages only from "Sarah" module
  6. // levels: [], // at this case levels are ignoring
  7. });
  8. logger.addListener(listener);
  9. logger.module('Alice').info('Info message', {foo: 'bar'});
  10. logger.module('Bob').warn('Warn message', {bar: 'baz'});
  11. logger.module('Sarah').error('Error message');
  12. /* console
  13. {
  14. timestamp: 1467967421933,
  15. level: 'info',
  16. moduleName: 'myModule',
  17. message: 'Info message',
  18. extendedData: {foo: 'bar'},
  19. }
  20. */

removeListener(LogListener): void;

removeAllListeners(): void;

module(moduleName: string): LoggerModule;

getModule(moduleName: string): LoggerModule | null;

getModules(): Record;

Other Examples

Sentry transport

  1. import zerg from 'zerg';
  2. const logger = zerg.createLogger();
  3. const SENTRY_LEVEL_MAP = {
  4. info: 'info',
  5. warn: 'warning',
  6. error: 'error',
  7. fatal: 'error',
  8. };
  9. function sentryTransport(logMessage) {
  10. const level = SENTRY_LEVEL_MAP[logMessage.level];
  11. Sentry.withScope((scope) => {
  12. scope.setLevel(level);
  13. Object.keys(logMessage.extendedData).forEach((key) => {
  14. scope.setExtra(key, logMessage.extendedData[key]);
  15. });
  16. scope.setTag('module', logMessage.moduleName);
  17. Sentry.captureMessage(logMessage.message);
  18. });
  19. }
  20. const listener = zerg.createListener({handler: sentryTransport});
  21. logger.addListener(listener);

Remote debug transport

It is be useful for debug when browser (or device) doesn’t provide tool: Android with default browser, WinPhone, SmartTV.

At browser:

  1. import zerg from 'zerg';
  2. const logger = zerg.createLogger();
  3. function remoteTransport(logMessage) {
  4. const req = new XMLHttpRequest();
  5. req.open('POST', 'http://myhost.com:3000/log', false);
  6. req.setRequestHeader('Content-type', 'application/json');
  7. req.send(JSON.stringify(logMessage));
  8. }
  9. const listener = zerg.createListener({handler: remoteTransport});
  10. logger.addListener(listener);

Don’t forget, host (http://myhost.com:3000/log) must be reachable from device.

At server you may use express:

  1. const express = require('express');
  2. const bodyParser = require('body-parser');
  3. const app = express();
  4. app.use(bodyParser.json()); // for parsing application/json
  5. app.post('/log', (req, res) => {
  6. console.log(req.body);
  7. });
  8. app.listen(3000);