diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 17c7761d6..f9f5d70a7 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -47,6 +47,7 @@ All definitions files include a header with the author and editors, so at some p * [Breeze](http://www.breezejs.com/) (by [Boris Yankov](https://github.com/borisyankov)) * [Browser Harness](https://github.com/scriby/browser-harness) (by [Chris Scribner](https://github.com/scriby)) * [bucks](https://github.com/CyberAgent/bucks.js) (by [Shunsuke Ohtani](https://github.com/zaneli)) +* [bunyan](https://github.com/trentm/node-bunyan) (by [Alex Mikhalev](https://github.com/amikhalev)) * [CasperJS](http://casperjs.org) (by [Jed Mao](https://github.com/jedmao)) * [CanvasJS](http://canvasjs.com) (by [Mark Overholt](https://github.com/mover5)) * [Cheerio](https://github.com/MatthewMueller/cheerio) (by [Bret Little](https://github.com/blittle)) diff --git a/bunyan/bunyan-test.ts b/bunyan/bunyan-test.ts new file mode 100644 index 000000000..7b7266e3c --- /dev/null +++ b/bunyan/bunyan-test.ts @@ -0,0 +1,106 @@ +/// + +import bunyan = require('bunyan'); + +var ringBufferOptions:bunyan.RingBufferOptions = { + limit: 100 +}; +var ringBuffer:bunyan.RingBuffer = new bunyan.RingBuffer(ringBufferOptions); +ringBuffer.write("hello"); +ringBuffer.end(); +ringBuffer.destroy(); +ringBuffer.destroySoon(); + +var level:number; +level = bunyan.resolveLevel("trace"); +level = bunyan.resolveLevel("debug"); +level = bunyan.resolveLevel("info"); +level = bunyan.resolveLevel("warn"); +level = bunyan.resolveLevel("error"); +level = bunyan.resolveLevel("fatal"); +level = bunyan.resolveLevel(bunyan.TRACE); +level = bunyan.resolveLevel(bunyan.DEBUG); +level = bunyan.resolveLevel(bunyan.INFO); +level = bunyan.resolveLevel(bunyan.WARN); +level = bunyan.resolveLevel(bunyan.ERROR); +level = bunyan.resolveLevel(bunyan.FATAL); + +var options:bunyan.LoggerOptions = { + name: 'test-logger', + streams: [{ + type: 'stream', + stream: process.stdout, + level: bunyan.TRACE + }, { + type: 'file', + path: '/tmp/test.log', + level: bunyan.DEBUG, + closeOnExit: true + }, { + type: 'rotating-file', + path: '/tmp/test2.log', + level: bunyan.INFO, + closeOnExit: false + }, { + type: 'raw', + stream: process.stderr, + level: bunyan.WARN + }, { + type: 'raw', + stream: ringBuffer, + level: bunyan.ERROR + }] +}; + +var log = bunyan.createLogger(options); + +log.addSerializers(bunyan.stdSerializers); +var child = log.child({name: 'child'}); +child.reopenFileStreams(); +log.addStream({path: '/dev/null', name: 'stream1'}); +child.level(bunyan.DEBUG); +child.level('debug'); +child.levels(0, bunyan.ERROR); +child.levels(0, 'error'); +child.levels('stream1', bunyan.FATAL); +child.levels('stream1', 'fatal'); + +var buffer = new Buffer(0); +var error = new Error(''); +var object = { + test: 123 +}; + +log.trace(buffer); +log.trace(error); +log.trace(object); +log.trace('Hello, %s', 'world!'); +log.debug(buffer); +log.debug(error); +log.debug(object); +log.debug('Hello, %s', 'world!'); +log.info(buffer); +log.info(error); +log.info(object); +log.info('Hello, %s', 'world!'); +log.warn(buffer); +log.warn(error); +log.warn(object); +log.warn('Hello, %s', 'world!'); +log.error(buffer); +log.error(error); +log.error(object); +log.error('Hello, %s', 'world!'); +log.fatal(buffer); +log.fatal(error); +log.fatal(object); +log.fatal('Hello, %s', 'world!'); + +var recursive = { + hello: 'world', + whats: { + huh: recursive + } +} + +JSON.stringify(recursive, bunyan.safeCycles()); diff --git a/bunyan/bunyan.d.ts b/bunyan/bunyan.d.ts new file mode 100644 index 000000000..d26049bc3 --- /dev/null +++ b/bunyan/bunyan.d.ts @@ -0,0 +1,100 @@ +// Type definitions for node-bunyan +// Project: https://github.com/trentm/node-bunyan +// Definitions by: Alex Mikhalev +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module "bunyan" { + import events = require('events'); + import EventEmitter = events.EventEmitter; + import WritableStream = NodeJS.WritableStream; + + class Logger extends EventEmitter { + constructor(options:LoggerOptions); + addStream(stream:Stream):void; + addSerializers(serializers:Serializers):void; + child(options:LoggerOptions, simple?:boolean):Logger; + reopenFileStreams():void; + + level(value:any /* number | string */):void; + levels(name:any /* number | string */, value:any /* number | string */):void; + + trace(error:Error, format?:any, ...params:any[]):void; + trace(buffer:Buffer, format?:any, ...params:any[]):void; + trace(obj:Object, format?:any, ...params:any[]):void; + trace(format:string, ...params:any[]):void; + debug(error:Error, format?:any, ...params:any[]):void; + debug(buffer:Buffer, format?:any, ...params:any[]):void; + debug(obj:Object, format?:any, ...params:any[]):void; + debug(format:string, ...params:any[]):void; + info(error:Error, format?:any, ...params:any[]):void; + info(buffer:Buffer, format?:any, ...params:any[]):void; + info(obj:Object, format?:any, ...params:any[]):void; + info(format:string, ...params:any[]):void; + warn(error:Error, format?:any, ...params:any[]):void; + warn(buffer:Buffer, format?:any, ...params:any[]):void; + warn(obj:Object, format?:any, ...params:any[]):void; + warn(format:string, ...params:any[]):void; + error(error:Error, format?:any, ...params:any[]):void; + error(buffer:Buffer, format?:any, ...params:any[]):void; + error(obj:Object, format?:any, ...params:any[]):void; + error(format:string, ...params:any[]):void; + fatal(error:Error, format?:any, ...params:any[]):void; + fatal(buffer:Buffer, format?:any, ...params:any[]):void; + fatal(obj:Object, format?:any, ...params:any[]):void; + fatal(format:string, ...params:any[]):void; + } + + interface LoggerOptions { + name: string; + streams?: Stream[]; + level?: string; + stream?: WritableStream; + serializers?: Serializers; + src?: boolean; + } + + interface Serializers { + [key:string]: (input:any) => string; + } + + interface Stream { + type?: string; + level?: any; // number | string + path?: string; + stream?: WritableStream; + closeOnExit?: boolean; + } + + export var stdSerializers:Serializers; + + export var TRACE:number; + export var DEBUG:number; + export var INFO:number; + export var WARN:number; + export var ERROR:number; + export var FATAL:number; + + export function resolveLevel(value:any /* number | string */):number; + + export function createLogger(options:LoggerOptions):Logger; + + class RingBuffer extends EventEmitter { + constructor(options:RingBufferOptions); + + writable:boolean; + records:any[]; + + write(record:any):void; + end(record?:any):void; + destroy():void; + destroySoon():void; + } + + interface RingBufferOptions { + limit?: number; + } + + export function safeCycles():(key:string, value:any) => any; +}