过滤 JS 日志内容,常见场景有 浏览器端过滤、Node.js 端过滤、构建阶段过滤 和 日志平台过滤。下面按使用场景给你一份实用指南。
console 自带过滤(最简单)在浏览器 DevTools 中:
log / info / warn / error✅ 无需改代码,适合调试
console 方法(常用)适合生产环境屏蔽或过滤日志
const isDev = process.env.NODE_ENV !== 'production';
if (!isDev) {
console.log = () => {};
console.debug = () => {};
}
✅ 优点:简单
❌ 缺点:无法按内容过滤
function filterLog(...args) {
const blockWords = ['debug', 'test'];
const msg = args.join(' ');
if (blockWords.some(w => msg.includes(w))) return;
console.log(...args);
}
filterLog('this is debug info'); // 被过滤
filterLog('user login success'); // 正常输出
✅ 可按内容过滤
✅ 可扩展为日志系统
const logger = {
info(...args) {
if (process.env.NODE_ENV === 'development') {
console.log('[INFO]', ...args);
}
},
error(...args) {
console.error('[ERROR]', ...args);
}
};
logger.info('debug info'); // 开发环境输出
logger.error('server error'); // 始终输出
✅ 控制粒度更细
✅ 易维护
常用库:
winstonpinolog4jswinston 示例
const winston = require('winston');
const logger = winston.createLogger({
level: 'info', // 只输出 info 及以上
transports: [new winston.transports.Console()]
});
logger.debug('debug info'); // 被过滤
logger.info('info msg');
logger.error('error msg');
✅ 支持级别过滤
✅ 支持文件 / 远程日志
function log(msg) {
if (/secret|password/.test(msg)) return;
console.log(msg);
}
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production')
})
配合:
if (process.env.NODE_ENV !== 'production') {
console.log(xxx);
}
❌ 不能过滤字符串拼接的日志
✅ 可配合 UglifyJS / Terser 删除 console
terserOptions: {
compress: {
drop_console: true
}
}
✅ 生产环境常用
如果是线上日志系统:
示例(ELK):
{
"query": {
"bool": {
"must_not": [
{ "match": { "message": "debug" } }
]
}
}
}
| 场景 | 推荐方式 |
|---|---|
| 浏览器调试 | DevTools |
| 生产环境 | 重写 console / 封装 logger |
| Node 服务 | winston / pino |
| 构建阶段 | Terser drop_console |
| 日志平台 | 查询过滤 |
console.errorwarn / error如果你能说明:
我可以给你一份更精确的过滤方案或现成代码。