Scala REPL中LazyLogging日志无法打印的解决问询
解决Scala Play应用REPL中LazyLogging日志不输出的问题
我之前也碰到过一模一样的情况——在Play项目的sbt console里用LazyLogging死活打不出日志,折腾了好一会儿才捋清楚问题根源,分享几个实用的解决办法给你:
1. 先检查并调整你的logback.xml配置
从你提供的配置内容来看,重点确认这两点:
- 控制台输出的
CONSOLEAppender有没有设置过高的日志阈值:如果配置里的ThresholdFilter设的是INFO,那DEBUG级别的日志会被直接过滤,按需调整成你需要的级别(比如DEBUG)。 - 给代码所在的包单独配置Logger级别:避免被Root Logger的级别限制,在logback.xml里添加一段针对你项目包的配置:
<logger name="com.yourcompany.yourapp" level="DEBUG" additivity="false"> <appender-ref ref="CONSOLE"/> </logger>
把com.yourcompany.yourapp换成你实际的项目包名,这样这个包下的日志会直接输出到控制台,不受Root Logger的级别约束。
2. 让sbt Console正确加载logback配置
有时候sbt启动console时,并不会自动加载Play项目里的conf/logback.xml,这时候需要显式指定配置文件路径:
在sbt shell里执行:
console -Dlogback.configurationFile=conf/logback.xml
如果不想每次都敲这个命令,可以把参数加到项目的build.sbt里,一劳永逸:
javaOptions in Compile in console += "-Dlogback.configurationFile=conf/logback.xml"
之后直接敲console就能自动加载配置了。
3. 确认LazyLogging的使用没有遗漏
别小看这个细节,有时候可能是自己代码写漏了关键部分:
import com.typesafe.scalalogging.LazyLogging // 要正确混入LazyLogging trait object TestLogger extends LazyLogging { def test(): Unit = { logger.info("终于能看到日志了!") logger.debug("Debug级别的日志也出来啦") } }
在REPL里调用TestLogger.test(),看看日志是否正常输出。
4. 清理sbt缓存后重试
如果上面的方法都没用,可能是sbt缓存的问题,先清理缓存再启动console:
clean console
一般来说,前两步就能解决大部分问题了,你可以逐个尝试~
内容的提问来源于stack exchange,提问作者irregular
相关产品推荐
相关产品推荐

