优化:降低访问日志噪声并增加日志文件轮转
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
import test from 'node:test'
|
||||
import assert from 'node:assert/strict'
|
||||
|
||||
import { resolveAccessLogLevel } from './access-log.js'
|
||||
|
||||
test('resolveAccessLogLevel sends successful reads to debug', () => {
|
||||
assert.equal(resolveAccessLogLevel('GET', 200), 'debug')
|
||||
assert.equal(resolveAccessLogLevel('head', 304), 'debug')
|
||||
})
|
||||
|
||||
test('resolveAccessLogLevel keeps writes and failures at info', () => {
|
||||
assert.equal(resolveAccessLogLevel('POST', 200), 'info')
|
||||
assert.equal(resolveAccessLogLevel('GET', 404), 'info')
|
||||
assert.equal(resolveAccessLogLevel('GET', 500), 'info')
|
||||
})
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Request, Response, NextFunction } from 'express'
|
||||
import { createRequestId, logInfo } from '../utils/logger.js'
|
||||
import { createRequestId, logDebug, logInfo } from '../utils/logger.js'
|
||||
|
||||
export function accessLogMiddleware(req: Request, res: Response, next: NextFunction): void {
|
||||
const startedAt = Date.now()
|
||||
@@ -13,7 +13,9 @@ export function accessLogMiddleware(req: Request, res: Response, next: NextFunct
|
||||
return
|
||||
}
|
||||
|
||||
logInfo('[http/access]', 'request completed', {
|
||||
const writeLog =
|
||||
resolveAccessLogLevel(req.method, res.statusCode) === 'debug' ? logDebug : logInfo
|
||||
writeLog('[http/access]', 'request completed', {
|
||||
requestId,
|
||||
method: req.method,
|
||||
originalUrl: req.originalUrl,
|
||||
@@ -33,6 +35,18 @@ export function accessLogMiddleware(req: Request, res: Response, next: NextFunct
|
||||
next()
|
||||
}
|
||||
|
||||
export function resolveAccessLogLevel(method: unknown, statusCode: unknown): 'debug' | 'info' {
|
||||
const normalizedMethod = String(method || '')
|
||||
.trim()
|
||||
.toUpperCase()
|
||||
const normalizedStatus = Number(statusCode || 0)
|
||||
return ['GET', 'HEAD'].includes(normalizedMethod) &&
|
||||
normalizedStatus >= 200 &&
|
||||
normalizedStatus < 400
|
||||
? 'debug'
|
||||
: 'info'
|
||||
}
|
||||
|
||||
function resolveRequestId(req: Request): string {
|
||||
const fromHeader = String(req.headers['x-request-id'] || '').trim()
|
||||
return fromHeader || createRequestId('req')
|
||||
|
||||
Reference in New Issue
Block a user