【问题标题】:How do I configure Scala Breeze to use log4j or slf4j如何配置 Scala Breeze 以使用 log4j 或 slf4j
【发布时间】:2013-02-23 00:56:31
【问题描述】:

我正在使用 Scala Breeze 的 breeze.optimize 包,看起来 Breeze ahs 实现了自己的日志库。

有没有办法将 Breeze 配置为使用 log4j 或 slf4j 等标准日志记录,以便我可以像对应用程序中的其他所有内容一样配置日志记录以进行优化?

或者,我如何关闭日志消息。默认情况下它们处于开启状态,并为我记录函数最小化的每次迭代,这为我产生了很多日志噪音。

Apache Commons 的包装器,基于他的以下回答:

import breeze.util.logging.Logger
import breeze.util.logging.Logger.Level
import org.apache.commons.logging.LogFactory

class BreezeCommonsLogger[T: ClassManifest] extends Logger {
    private val log = LogFactory.getLog(classManifest[T].erasure)

    def trace(f: => Any) { if (log.isTraceEnabled()) log.trace(f.toString) }
    def debug(f: => Any) { if (log.isDebugEnabled()) log.debug(f.toString) }
    def info(f: => Any) { if (log.isInfoEnabled()) log.info(f.toString) }
    def warn(f: => Any) { if (log.isWarnEnabled()) log.warn(f.toString) }
    def error(f: => Any) { if (log.isErrorEnabled()) log.error(f.toString) }
    def fatal(f: => Any) { if (log.isFatalEnabled()) log.fatal(f.toString) }
    def level_=(level: Level) {}
    def level = Logger.NEVER
}

我可以这样使用:

val lbfgs = new LBFGS[Mat](maxIters, 5, tolerance) {
    override val log = new BreezeCommonsLogger[LBFGS[Mat]]
}

【问题讨论】:

    标签: scala scalala


    【解决方案1】:

    请注意优化类如何具有log 类型的breeze.util.logging.Logger 成员变量。要关闭日志消息,提供了一个名为 breeze.util.logging.NullLogger 的类。要覆盖默认的log,您可以执行以下操作:

    val opt = new breeze.optimize.OWLQN { 
      override val log = breeze.util.logging.NullLogger
    }
    

    这将创建一个匿名类,使 OWLQN 优化器的所有内容保持不变,没有日志记录。

    就使用 log4j 或 slf4j 等替代日志记录源而言,尝试使用隐式转换将 log4j 记录器转换为 Breeze 记录器,或者考虑将记录器包装在继承自 Logger 的类中。

    【讨论】:

    • 这有效,关闭 NullLogger 和使用相同的方法将日志记录设置到不同的日志源。将编辑我的问题以包含包装类。
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多