如何在构建时将sbt编译器控制台日志输出至txt文件?
在build.sbt中配置编译日志输出到文件
要把sbt编译阶段的日志(包括你示例中的编译信息、警告)写入target/compiler_log.txt,可以通过自定义日志管理器实现,以下是具体配置:
全局日志配置(覆盖整个sbt会话)
如果希望所有sbt任务的日志都同时输出到控制台和目标文件,在build.sbt中添加:
import sbt.internal.util.ManagedLogger import sbt.util.{Level, Logger, LogManager} logManager := LogManager.defaultManager( baseDirectory.value, (name: String, level: Level.Value, config: Logger.Config) => { // 保留控制台输出 val consoleLogger = Logger.defaultConsoleLogger(level, config) // 创建文件日志输出 val fileLogger = Logger.fileLogger( level, config, target.value / "compiler_log.txt", append = false // 设为true则追加日志,false则每次运行覆盖 ) // 同时启用两种日志输出 ManagedLogger(name, Vector(consoleLogger, fileLogger)) } )
仅编译任务日志配置
如果只需要将编译阶段的日志写入文件(不影响其他sbt任务的日志输出),可以针对compile任务单独配置:
import sbt.internal.util.ManagedLogger import sbt.util.{Level, Logger, LogManager} compile / logManager := LogManager.defaultManager( baseDirectory.value, (name: String, level: Level.Value, config: Logger.Config) => { val consoleLogger = Logger.defaultConsoleLogger(level, config) val fileLogger = Logger.fileLogger( level, config, target.value / "compiler_log.txt", append = false ) ManagedLogger(name, Vector(consoleLogger, fileLogger)) } )
效果验证
配置完成后,执行sbt console或sbt compile时,编译相关的[info]、[warn]日志会同时显示在控制台,并且写入target/compiler_log.txt文件,正好满足CI/CD场景下留存编译日志的需求。
内容的提问来源于stack exchange,提问作者yayuyo
相关产品推荐
相关产品推荐

