0.1.5 • Published 4 years ago
log-race v0.1.5
log-race
适用于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