在Firefox浏览器的日常开发调试中,控制台日志是排查问题的重要依据,但很多时候第三方脚本、历史遗留业务文件会输出大量无关日志,导致核心日志被淹没,增加排查难度。通过Tampermonkey脚本可以精准过滤掉特定文件的日志,同时保留其他正常日志的输出。

实现原理
浏览器的console对象的log、warn、error等方法都是可以被重写的,我们可以保存原始的控制台方法,然后自定义新的方法,在方法执行时先判断当前调用栈中是否包含目标文件的路径,如果包含则直接跳过执行,否则调用原始的控制台方法输出日志。
具体实现步骤
1. 创建Tampermonkey脚本
打开Firefox的Tampermonkey扩展,点击「添加新脚本」,填写脚本的基础配置信息,指定脚本生效的域名范围。
2. 编写过滤逻辑代码
核心逻辑是重写控制台方法,通过Error.stack获取调用栈,判断调用栈中是否包含目标文件的标识,以下是完整的脚本示例:
// ==UserScript==
// @name 精准过滤特定文件控制台日志
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 过滤Firefox控制台中指定文件的日志输出
// @author 开发者
// @match *://*/* // 可根据需要修改生效的域名,比如https://ipipp.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 需要过滤的文件路径关键词,可添加多个
const FILTER_KEYWORDS = ['target_file.js', 'old_module.js'];
// 保存原始的控制台方法
const originalConsole = {
log: console.log.bind(console),
warn: console.warn.bind(console),
error: console.error.bind(console),
info: console.info.bind(console)
};
// 判断调用栈是否包含目标文件
function isFromTargetFile() {
const stack = new Error().stack || '';
return FILTER_KEYWORDS.some(keyword => stack.includes(keyword));
}
// 重写console.log
console.log = function(...args) {
if (!isFromTargetFile()) {
originalConsole.log(...args);
}
};
// 重写console.warn
console.warn = function(...args) {
if (!isFromTargetFile()) {
originalConsole.warn(...args);
}
};
// 重写console.error
console.error = function(...args) {
if (!isFromTargetFile()) {
originalConsole.error(...args);
}
};
// 重写console.info
console.info = function(...args) {
if (!isFromTargetFile()) {
originalConsole.info(...args);
}
};
})();
3. 配置过滤规则
修改脚本中的FILTER_KEYWORDS数组,添加你需要过滤的文件路径关键词,比如你要过滤https://ipipp.com/static/js/old_logic.js的日志,就可以把old_logic.js添加到数组中。
注意事项
- 调用栈的获取依赖
Error.stack,部分压缩后的脚本调用栈可能不完整,需要调整关键词的匹配规则。 - 如果目标文件使用了异步输出日志,调用栈可能指向异步调度的代码,此时需要结合日志内容增加额外的过滤条件。
- 脚本生效后会全局重写控制台方法,如果需要在特定场景下临时关闭过滤,可以在脚本中添加开关逻辑。
扩展优化
如果需要更灵活的过滤规则,可以修改isFromTargetFile函数,支持正则匹配、日志内容匹配等,比如只过滤包含特定关键词的日志:
// 扩展过滤规则,同时匹配文件路径和日志内容
function isNeedFilter(...args) {
const stack = new Error().stack || '';
const logContent = args.join(' ');
// 匹配文件路径或者日志内容包含指定关键词
return FILTER_KEYWORDS.some(keyword => stack.includes(keyword) || logContent.includes(keyword));
}
通过以上方式,就可以在Firefox中通过Tampermonkey脚本实现特定文件控制台日志的精准过滤,减少无关日志的干扰,提升调试效率。
TampermonkeyFirefox控制台日志过滤JavaScript修改时间:2026-07-10 06:39:24