2013-02-22 2 views
0

Scala Breeze의 breeze.optimize 패키지를 사용하고 있으며 Breeze ahs가 자체 로깅 라이브러리를 구현 한 것처럼 보입니다.log4j 또는 slf4j를 사용하도록 Scala Breeze를 구성하는 방법

log4j 또는 slf4j와 같은 표준 로깅을 사용하도록 Breeze를 구성하는 방법이 있습니까? 그래서 응용 프로그램의 모든 작업과 동일한 방식으로 최적화 로깅을 구성 할 수 있습니까?

또는 로깅 메시지를 어떻게 그냥 끕니까? 그들은 기본적으로 켜져 있고 나를 위해 함수 최소화를 반복 할 때마다 로그를 남기므로 나에게 많은 로그 노이즈가 발생합니다. 그는 아래 답변 ONT 기반의 아파치 코 몬즈에 대한

래퍼 :

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 
} 

이 같은 사용할 수 있었다 : 최적화 클래스 인 log 멤버 변수를 얼마나

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

답변

1

공지 사항 유형은 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에서 상속하는 클래스 로거를 래핑 해보십시오.

+0

NullLogger를 사용하지 않고 동일한 접근 방식을 사용하여 다른 로그 소스에 대한 로깅을 설정하는 데 모두 효과적이었습니다. 래퍼 클래스를 포함하도록 내 질문을 편집합니다. –