HTTP Log使用
Log中间件配置说明
{
serviceName?: string // 当前服务名
prettyPrint?: boolean // 是否以json方式输出, 默认false
headers?: string[] // 需要记录的header列表
... // 后续新增..
}
服务名配置说明
下面2种方法任选一个:
-
配置环境变量 SERVICE_NAME 为当前服务名,log中的serviceName会读env中 SERVICE_NAME 的值.
-
初始化时,传递serviceName参数 (暂不可用)
HTTP:
app.use(ExpressHttpLoggerMiddleware({serviceName: 'svcName'}))
Grpc:
@UseInterceptors(new GrpcLoggerMiddleware({ serviceName: 'svcName' }))
Express || Nestjs 使用
1.导入
import { ExpressHttpLoggerMiddleware } from '@treelab/logger-metrics-middleware'
import * as Prometheus from 'prom-client'
2. 使用中间件
// 日志
app.use(ExpressHttpLoggerMiddleware())
// 指标
app.use('/metrics', async (req, res) => {
res.set('Content-Type', Prometheus.register.contentType)
const end = await Prometheus.register.metrics()
res.end(end)
})
}
完整例子
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ExpressHttpLoggerMiddleware } from '@treelab/logger-metrics-middleware'
import * as Prometheus from 'prom-client'
import bodyParser = require('body-parser');
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use(bodyParser.json());
app.use(ExpressHttpLoggerMiddleware())
app.use('/metrics', async (req, res) => {
res.set('Content-Type', Prometheus.register.contentType)
const end = await Prometheus.register.metrics()
res.end(end)
})
await app.listen(3000);
}
bootstrap();
Koa 使用
1.导入
import { KoaHttpLoggerMiddleware } from '@treelab/logger-metrics-middleware/dist/http-logger'
import * as Prometheus from 'prom-client'
2. 使用中间件
// 日志
app.use(KoaHttpLoggerMiddleware())
// 指标
router.get('/metrics',async (ctx) => {
ctx.header.set('Content-Type', Prometheus.register.contentType)
const end = await Prometheus.register.metrics()
ctx.body = end
})
}
Grpc Log 使用(仅支持Nestjs)
导入
import { GrpcLoggerMiddleware } from '@treelab/logger-metrics-middleware';
使用
// 在grpc Controller 上使用
@UseInterceptors(GrpcLoggerMiddleware)
@Controller()
export class GrpcController {
constructor(){}
}