bunyan(一个用于node.js服务的JSON日志库)

来源:互联网 发布:淘宝部分店铺无法使用 编辑:程序博客网 时间:2024/04/30 20:26

在实习中,遇到了一个需要将用户登录的信息记录到日志当中,在这次项目中时用的bunyan。

首先贴网址https://github.com/trentm/node-bunyan(npm也是相当有用的)

https://www.npmjs.com/package/bunyan

查看文档可以详细的知道bunyan的api


const logger = bunyan.createLogger({  name: 'website name',  serializers: {    req: bunyan.stdSerializers.req,    res: bunyan.stdSerializers.res,    err: bunyan.stdSerializers.err  },  streams: [    {      // stream: process.stdout      type: 'rotating-file',      level: 'info',      path: path.join(__dirname, '../../../logs', 'info.log'),      period: '1d',   // daily rotation      count: 7        // keep 7 back copies    },    {      type: 'rotating-file',      level: 'debug',      path: path.join(__dirname, '../../../logs', 'server.log'),      period: '1d',   // daily rotation      count: 7        // keep 7 back copies    },    {      type: 'rotating-file',      level: 'error',      path: path.join(__dirname, '../../../logs', 'error.log'),      period: '1d',   // daily rotation      count: 7        // keep 7 back copies    }  ]}); 

以上是写了三种level的streams,可以设置多个,这个在文档中也可以找到,对应的,使用的时候可以

import logger from '../util/logger';logger.info({    name:'zhangsan',    age:12}, 'logger success');
当然还有logger.error......等等

项目一启动就可以生成对应的日志文件了


bunyan自动添加的字段为"pid", "hostname", "time"  "v".在这个基础上可以添加自己需要的字段

构造函数api

var bunyan = require('bunyan');
var log = bunyan.createLogger({
    name: <string>,                     // Required 
    level: <level name or number>,      // Optional, see "Levels" section 
    stream: <node.js stream>,           // Optional, see "Streams" section 
    streams: [<bunyan streams>, ...],   // Optional, see "Streams" section 
    serializers: <serializers mapping>, // Optional, see "Serializers" section 
    src: <boolean>,                     // Optional, see "src" section 
 
    // Any other fields are added to all log records as is. 
    foo: 'bar',
    ...
});


logger.info的api

log.info();     // Returns a boolean: is the "info" level enabled? 
                // This is equivalent to `log.isInfoEnabled()` or 
                // `log.isEnabledFor(INFO)` in log4j. 
 
log.info('hi');                     // Log a simple string message (or number). 
log.info('hi %s', bob, anotherVar); // Uses `util.format` for msg formatting. 
 
log.info({foo: 'bar'}, 'hi');
                // The first field can optionally be a "fields" object, which 
                // is merged into the log record. 
 
log.info(err);  // Special case to log an `Error` instance to the record. 
                // This adds an "err" field with exception details 
                // (including the stack) and sets "msg" to the exception 
                // message. 
log.info(err, 'more on this: %s', more);
                // ... or you can specify the "msg". 
 
log.info({foo: 'bar', err: err}, 'some msg about this error');
                // To pass in an Error *and* other fields, use the `err` 
                // field name for the Error instance.

所有日志等级:log.trace, log.debug, log.info, log.warn, log.error,log.fatal.

剩下的就得去看文档了



0 0