【问题标题】:Set log level for scala-logging设置 scala 日志记录的日志级别
【发布时间】:2023-03-23 01:21:01
【问题描述】:

我的控制台应用程序采用log-level=<LEVEL> 选项。看一些examples in Java,看起来改变SLF4J记录器级别通常是可能的,但是scala-logging库似乎不是这种情况——不管我如何创建记录器它没有setLevel方法可用.有什么建议吗?

【问题讨论】:

    标签: scala logging scala-logging


    【解决方案1】:

    该库需要一个日志记录后端(您可以查看先决条件)。一旦你定义了它,你就可以通过配置文件来设置日志级别,例如:

    // src/main/resources/logback.xml
    <configuration>    
      <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"/>
    
      <root level="debug">
        <appender-ref ref="stdout"/>
      </root>
    </configuration>
    

    这将导致该特定记录器的日志级别设置为DEBUG。无论如何,如果您使用的是 slf4j 后端,这应该可以工作。希望对您有所帮助。

    【讨论】:

    • 但是这样我只能在构建时设置日志级别,对吧?运行时呢?
    • 我不确定你是否可以使用 logback 来做到这一点。或者,您可以使用提供您正在寻找的方法的 log4j 后端。这很好用,因为 scala-logging 可以与 log4j 后端一起使用 :)
    【解决方案2】:

    基于this answer,我使用了这段代码,它为我完成了工作:

    import ch.qos.logback.classic.{Level,Logger}
    import org.slf4j.LoggerFactory
    
    LoggerFactory
      .getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)
      .asInstanceOf[Logger]
      .setLevel(Level.INFO)
    

    【讨论】:

    • 原因:java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerAdapter 无法转换为 ch.qos.logback.classic.Logger
    • 这个答案已被弃用,因为 Logger 实例不再有方法 setLevel