You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit生产Node服务器404错误日志刷屏,如何禁用?

解决SvelteKit Node.js服务器被爬虫探测产生的404日志问题

针对你遇到的爬虫探测不存在路径导致日志被稀释的问题,提供三个层级的解决方案,按推荐优先级排序:

1. 在Caddy反向代理层拦截(推荐)

直接在Caddy层拦截这类探测请求,不转发给后端Node.js服务器,从根源避免日志生成。修改你的Caddyfile,添加路径匹配规则:

# 假设你的原有配置框架如下
your-domain.com {
    # 先添加拦截规则,放在反向代理配置之前
    @badPaths {
        # 精确匹配已知探测路径
        path /.env /login.action /about
        # 正则匹配所有.git相关路径(覆盖更全面)
        path_regexp ^/\.git/.*
    }
    # 对匹配请求直接返回404,不转发到后端
    respond @badPaths 404

    # 原有反向代理配置
    reverse_proxy localhost:3000
}

若想彻底丢弃请求(不给爬虫返回任何内容),可将respond @badPaths 404改为drop @badPaths,但返回404更符合HTTP规范。

2. 修改SvelteKit日志配置过滤特定错误

如果无法在Caddy层拦截,可通过自定义SvelteKit的日志器过滤特定404错误:

方法A:修改svelte.config.js

在SvelteKit配置文件中覆盖错误日志输出逻辑:

import adapter from '@sveltejs/adapter-node';

export default {
    kit: {
        adapter: adapter({
            out: 'build',
            env: { host: '0.0.0.0', port: '3000' }
        }),
        logger: {
            error: (err) => {
                const targetPaths = ['/.git/config', '/.env', '/login.action', '/about'];
                // 判断是否为爬虫探测的404错误
                const isBad404 = err.message?.startsWith('Error: Not found: ') && 
                    targetPaths.some(path => err.message.includes(path));
                
                // 仅输出非探测类错误
                if (!isBad404) console.error(err);
            }
        }
    }
};

方法B:自定义Node.js启动文件(适配Pino日志)

若你的SvelteKit使用默认的Pino日志库,可在自定义启动文件中配置日志过滤:

import { createServer } from './build/index.js';
import pino from 'pino';

const logger = pino({
    level: 'info',
    transport: {
        target: 'pino-pretty',
        options: {
            filter: (log) => {
                const targetPaths = ['/.git/config', '/.env', '/login.action', '/about'];
                // 过滤目标路径的404日志
                if (log.msg?.startsWith('Error: Not found: ') && 
                    targetPaths.some(path => log.msg.includes(path))) {
                    return false;
                }
                return true;
            }
        }
    }
});

createServer({ logger }).listen({ port: 3000 });

3. 临时方案:通过Shell管道过滤日志输出

若需快速生效且不想修改配置,可在启动服务器时用grep过滤日志输出:

node build/index.js | grep -v "Error: Not found: /\.git/config\|Error: Not found: /\.env\|Error: Not found: /login.action\|Error: Not found: /about"

注意:该方案仅事后过滤终端输出,后端仍会生成日志,仅适合临时场景。


内容的提问来源于stack exchange,提问作者Plagiatus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:57:32