Appearance
hono-logger
简介
hono-logger 是 Hono 框架的日志中间件,它提供了简单而强大的请求日志记录功能。这个中间件可以记录请求的方法、路径、状态码和响应时间等信息,帮助开发者监控和调试应用程序。
安装
bash
npm install hono @hono/logger基本使用
typescript
import { Hono } from 'hono'
import { logger } from '@hono/logger'
const app = new Hono()
// 使用默认配置
app.use('*', logger())
app.get('/', (c) => {
return c.text('Hello World')
})
app.post('/users', (c) => {
return c.json({ id: 1, name: 'User' })
})
app.listen(3000)
// 输出示例: [GET] / 200 0ms
// 输出示例: [POST] /users 200 2ms高级配置
typescript
import { Hono } from 'hono'
import { logger } from '@hono/logger'
const app = new Hono()
// 自定义日志格式
app.use(
'*',
logger({
// 自定义日志格式
format: (info) => {
return `${info.timestamp} [${info.method}] ${info.path} - ${info.status} ${info.responseTime}ms`
},
// 自定义时间戳格式
timestamp: () => {
return new Date().toISOString()
},
// 日志输出函数
log: (msg) => {
// 可以使用自定义日志库或写入文件
console.log(`[Hono]`, msg)
},
}),
)
// 条件日志记录
app.use(
'*',
logger({
// 根据条件决定是否记录日志
skip: (c) => {
// 跳过健康检查路由的日志
return c.req.path === '/health'
},
}),
)
// 记录请求体和响应体
app.use(
'*',
logger({
// 记录请求体(小心处理大型请求体)
logRequestBody: true,
// 记录响应体(小心处理大型响应体)
logResponseBody: true,
// 自定义格式以包含请求体和响应体
format: (info) => {
let log = `[${info.method}] ${info.path} ${info.status} ${info.responseTime}ms`
if (info.requestBody) {
log += `\nRequest: ${JSON.stringify(info.requestBody)}`
}
if (info.responseBody) {
log += `\nResponse: ${JSON.stringify(info.responseBody)}`
}
return log
},
}),
)
// 不同环境使用不同配置
const isDev = process.env.NODE_ENV === 'development'
app.use(
'*',
logger({
// 开发环境使用彩色输出,生产环境使用简洁格式
format: isDev
? 'dev' // 预定义的开发格式,带颜色
: 'short', // 预定义的简洁格式
// 生产环境只记录错误
skip: !isDev ? (c) => c.res.status < 400 : undefined,
}),
)注意事项
- 在生产环境中,考虑只记录错误或重要信息,避免日志过于冗长
- 小心记录请求体和响应体,它们可能包含敏感信息或过大的数据
- 对于高流量应用,日志记录可能影响性能,考虑使用异步日志或采样
- 可以结合其他日志库(如 Winston、Pino)进行更复杂的日志管理
- 健康检查等频繁调用的端点可以跳过日志记录,减少噪音
- 在处理敏感数据时,确保日志中不包含密码、令牌等敏感信息