写完代码一运行,控制台干干净净,log语句像被吃了——你不是一个人。在调试Java、Python、Node.js甚至前端Vue项目时,‘日志没输出’是高频踩坑现场,但往往不是代码写错了,而是日志系统压根没启动、没配置、或者被静音了。
1. 日志级别设太高,低级日志直接被过滤
比如Logback或Log4j默认级别是INFO,而你写了logger.debug("用户登录成功");,那这条就永远不会出现在控制台。检查你的配置文件:
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
改成level="DEBUG"试试,或者临时加一句logger.info("test")确认是不是级别问题。
2. 控制台Appender被注释或没启用
有些项目为了上生产,把console输出直接删了,只留file appender。打开logback-spring.xml或log4j2.yml,找<appender name="CONSOLE">那段,确认它没被<!-- -->包住,且<root>里有<appender-ref ref="CONSOLE"/>。
3. Spring Boot的logging.pattern.console被清空
在application.properties里写了logging.pattern.console=(后面啥也没填),等于把控制台格式设成空字符串,看起来就像没输出。删掉这行,或补上标准格式:
logging.pattern.console=%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
4. 前端console.log被浏览器禁用或重写了
某些安全插件或老版本企业内网页面会执行console.log = function(){};来屏蔽日志。打开开发者工具,在Console里手动敲console.log('test'),如果没反应,再查查页面有没有加载类似no-console.js这类脚本。
5. 日志异步刷盘,程序太快退出
特别是单元测试或命令行小脚本,main函数执行完就exit了,而异步日志线程还没来得及把buffer里的内容刷到控制台。加个延迟或强制刷新:
// Java Logback
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
context.stop(); // 或调用 LoggerContext.reset()
// Node.js winston
logger.close(); // 等待日志写入完成
下次再遇到日志消失,别急着翻代码逻辑,先摸摸这几个开关——很多时候,不是没打,是没让打出来。