0.1.5 • Published 4 years ago

log-race v0.1.5

Weekly downloads
-
License
MIT
Repository
-
Last release
4 years ago

log-race

pipeline status

适用于Node.js的服务端日志打点模块,遵循百家互联Node.js日志打点规范。

包含4部分日志类型:

  • access log 请求访问日志
  • app log 全局app日志
  • request log 请求业务日志
  • rpc log 远程请求相关日志

要求:

  • Node.js >= 8.0
  • express >= 4.0
  • koa >= 2.0
  • egg >= 2.0

安装:

npm install log-race --registry=http://npm.baijia.com/

技术选型:

typescript + jest

编译:

npm run build

测试:

npm run test

日志打点

打印全局日志

初始化 app logger:

const logRace = require('log-race');
const logger = logRace.createLogger({
    app: 'myapp', // app名称
    product: 'gaotu', // 产品线
    env: 'dev', // 部署环境:dev|prod|test
    debug: true, // 是否debug测试,会在控制台打印日志
    level: LogLevel.INFO, // 日志级别,大于设置级别的日志不打印
    logDir: './logs' // 日志目录,默认项目根目录中的`logs`目录
});

日志打印:

// 打印字符串
logger.error('error message');
logger.warn('warn message');
logger.info('info message');
logger.debug('debug message');
logger.trace('trace message');

// 打印对象,支持:error, warn, info, debug, trace
logger.info({
    message: 'info message',
    // 打印扩展字段
    custom: {
        id: 111111
    }
});

// 直接 `Error` 对象
logger.error(new Error('my error'));

打印rpc日志

rpc请求日志打印,需要提供以下参数:

logger.rpc({
    status: 200; // rpc返回的状态码
    host: '1.1.1.1:8000'; // 服务端host名称
    protocol: 'http'; // 协议名称
    method: 'GET'; // 请求method
    path: '/xxx'; // 请求路径
    requestTime: 0.123; // 请求花费时间,毫秒
});

打印请求日志

日志组件支持koa2, express, eggjs等常用web框架,使用中间件的形式初始化请求日志。

例如:koa2 的请求日志组件初始化:

const Koa = require('koa');
const app = new Koa();

// 使用 koa 中间件,日志中间件需要放第一个, 这样其他中间件和action都可以使用
app.use(koa(
    {
        app: 'myapp', // app名称
        product: 'gaotu', // 产品线
        // ... 同app log
        useAddInfo: true, // 是否单个请求合并打印日志,使用 addInfo 追加 info 日志
        logAccess: true, // 是否打印access日志
    },
    'logger' // 注入到ctx的logger变量名,对于eggjs等默认绑定logger的框架,可以另起别名
));

koa2 的请求日志打印:

const Router = require('koa-router');
const router = new Router();
router.get('/*', async (ctx) => {

    // 打印字符串
    ctx.logger.error('error message');
    ctx.logger.warn('warn message');

    // 如果设置了`useAddInfo`参数,则只能打印字符串,不支持打印对象
    // 此时`logger.info`与`logger.addInfo`都只会追加日志,请求结束后再进行打印
    ctx.logger.info('info message');
    ctx.logger.addInfo('info message');

    ctx.logger.debug('debug message');
    ctx.logger.trace('trace message');

    // 打印对象,支持:error, warn, debug, trace
    ctx.logger.error({
        message: 'info message',
        // 打印扩展字段
        custom: {
            id: 111111
        }
    });

    ctx.body = 'Hello';
});

app.use(router.routes());

日志切割

支持自定义日志切割规则,后台使用日志切割模块进行自动切分和清理。

const {rotator} = require('log-race');
// 设置切分规则数组
rotator.setConfig([{
    match: '*', // 匹配所有文件名,支持正则表达式
    rotate: 'YYYYMMDDHH', // 切分后缀
    interval: 'hour', // 切分检查间隔
    retainDays: 7, // 日志保留天数
    allowEmpty: false // 是否允许切分空文件
}]);
// 如果不是按小时计时,则需要重启一下
rotator.restart();

日志打印规范

log-race 符合百家互联 Node.js日志打印规范, 业务中可以直接拿来使用。

插件

log-race相关插件在 plugins 目录中

egg-log-race 提供给eggjs使用的logger插件。

0.1.5

4 years ago