2013-02-16 2 views
2

로깅 메서드를 수동으로 정의하지 않고도 다음을 수행 할 수있는 방법이 있습니까? 예 : def error : 당신이 많은 클래스에서 로그인하지 로깅 방법마다 시간을 재 작성하려면"log.xxxx"가없는 스칼라 호출 로깅 메서드

object FooBar { 
    lazy val log = LoggerFactory.getLogger("AndroidProxy") 
    def error(msg: String) = log.error(msg) 


    def my_method(): Unit = { 
    error("This is an error!") 
    } 
} 

답변

5

import log.error 
+0

굉장 !! 한 번에 로그, 오류, 정보를 가져 오기위한 속기가 있습니까? 나는'import log._'를 할 수 있습니다 - 나는 그것이 부작용이 있는지를 알기에 충분하지 않습니다. – Hamy

+2

'import log._' 또는'import log. {info, trace, error}'. 마지막으로 이름 바꾸기 :'import log. {info => inf, trace => trc, error => err}'(3 글자에 사로 잡힌 ...). –

+0

감사합니다 Randall! 관심이 있으시면, 사소한 후속 질문 [here] (http://stackoverflow.com/questions/14906830/import-specific-method-signature-in-scala)이 있습니다. – Hamy

1

def error 교체, 당신은 특성 그리고

trait Logging { 
    lazy val logger = LoggerFactory.getLogger(getClass()) 

    def error(msg: => String) = log.error(msg) 
} 

의를 만들 수 있습니다 로깅이 필요한 수업 ...

class MyClass extend Logging { 
    def method() { 
     //do stuff 
     error("oups!") 
    } 
} 

일반적으로 문자열 매개 변수가 사용 된 경우에만 평가되도록 msg 매개 변수를 이름 (=> String 사용)으로 전달하는 것이 좋습니다.

또한 getClass가 로거의 이름임을 유의하십시오. 이것은 로거 이름이 하드 코딩 된 이름이 아닌 로깅 특성을 확장하는 클래스의 이름이기 때문에 유용합니다.