如何将Scala-Sbt应用程序输出重定向至文件?
解决SBT应用日志重定向到文件的问题
方案1:同时捕获标准输出与标准错误
默认>仅重定向标准输出(stdout),但应用运行日志常输出到标准错误(stderr),需同时捕获两者:
sbt "run 9001" > logFile 2>&1
2>&1表示将标准错误(文件描述符2)重定向至标准输出(文件描述符1),确保所有日志写入目标文件。
方案2:关闭SBT颜色输出并重定向
日志中的[35m类ANSI控制码是SBT的颜色标记,可通过参数关闭后再重定向,提升日志可读性:
sbt -Dsbt.log.noformat=true "run 9001" > logFile 2>&1
方案3:通过应用日志框架配置输出到文件
若应用使用SLF4J、Logback或Log4j等日志框架,直接修改配置文件指定文件输出更灵活。以Logback为例,修改logback.xml:
<appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>./app-run.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="FILE" /> </root>
这种方式不受SBT控制台输出影响,能精准控制日志格式与存储路径。
方案4:使用runMain指定主类运行
若明确应用主类路径,用runMain替代run可减少SBT自身日志与应用日志的混淆:
sbt "runMain com.your.app.MainClass 9001" > logFile 2>&1
内容的提问来源于stack exchange,提问作者ajits089
相关产品推荐
相关产品推荐

