如何配置Scala Breeze以使用log4j或slf4j

时间:2013-02-22 15:53:14

标签: scala scalala

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

有没有办法配置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]]
}

1 个答案:

答案 0 :(得分:1)

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

log

这将创建一个匿名类,使val opt = new breeze.optimize.OWLQN { override val log = breeze.util.logging.NullLogger } 优化器的所有内容保持不变,无法记录。

在使用替代日志源(如log4j或slf4j)方面,尝试使用隐式转换从log4j记录器转换为Breeze记录器,或者查看将记录器包装在继承自OWLQN的类中。