私はScalaBreezeのbreeze.optimize
パッケージを使用していますが、Breezeahsが独自のロギングライブラリを実装しているようです。
log4jやslf4jなどの標準ログを使用するようにBreezeを構成して、アプリケーションの他のすべてに対して行うのと同じ方法で最適化のログを構成できるようにする方法はありますか?
または、ログメッセージをオフにするにはどうすればよいですか。これらはデフォルトでオンになっており、関数最小化のすべての反復をログに記録します。これにより、多くのログノイズが発生します。
以下の回答に基づくApacheCommonsのラッパー:
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]]
}