如何在生产环境中禁用Nuxt3应用的404错误日志?
解决Nuxt3生产环境H3框架记录爬虫404日志的问题
针对你遇到的爬虫引发大量404日志的情况,可以通过以下几种方式处理:
1. 自定义中间件过滤特定404请求
在server/middleware目录下创建ignore-404-logs.ts文件,添加如下代码:
export default defineEventHandler(async (event) => { event.node.res.on('finish', () => { if (event.node.res.statusCode === 404) { // 列出爬虫常访问的不存在路径,可根据实际日志补充 const ignorePaths = [ '/blog/wp-includes/wlwmanifest.xml', '/xmlrpc.php', '/wp-login.php', '/robots.txt' ] if (ignorePaths.some(path => event.path.includes(path))) { // 删除错误上下文,避免被日志系统捕获 delete event.context.error } } }) })
这种方式可以精准过滤你不想记录的404路径,不会影响其他正常的404错误日志。
2. 调整Nuxt Nitro的日志配置
在nuxt.config.ts中修改日志过滤规则,直接忽略特定的404日志:
export default defineNuxtConfig({ nitro: { logger: { filter: (log) => { // 过滤包含"Page not found:"且路径属于爬虫常见路径的日志 if (log.message?.includes('Page not found:')) { const targetPath = log.data?.path || log.url if (targetPath && ['//blog/wp-includes/wlwmanifest.xml', '/xmlrpc.php'].some(p => targetPath.includes(p))) { return false } } // 保留其他日志 return true } } } })
如果想全局降低日志级别,也可以将logLevel设置为warn(生产环境),这样info级别的404日志会被隐藏:
export default defineNuxtConfig({ nitro: { logLevel: process.env.NODE_ENV === 'production' ? 'warn' : 'info' } })
3. 重写H3的错误处理逻辑
直接覆盖H3的默认错误处理,只记录非404的错误:
export default defineNuxtConfig({ nitro: { h3: { onError: (error, event) => { // 仅处理状态码不是404的错误 if (error.statusCode !== 404) { // 这里可以保留原有的错误日志逻辑,比如输出到控制台或监控服务 console.error('Server error:', error) } // 404错误不做日志记录 } } } })
这种方式会完全禁用所有404错误的日志,适合不需要记录任何404日志的场景。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

