2017-04-24 1 views
1

Crystal 프로그래밍 언어로 응용 프로그램을 작성하고 있습니다. Crystal에 대해 좋아하는 것 중 하나는 Logger 유틸리티와 같은 광범위한 표준 라이브러리입니다.크리스탈의 글로벌 로그 수준

로깅 구문은 다음과 같습니다

require "logger" 

log = Logger.new(STDOUT) 
log.level = Logger::WARN 

log.debug("Created logger") 
log.info("Program started") 
log.warn("Nothing to do!") 

(Taken from Crystal documentation)

내가 실행 해요 문제는이 정도 수준의 트랙을 유지하기 어려운 것입니다. 둘 중 하나는 동일한 Logger 객체를 로그인해야하는 클래스/메소드에 전달해야하거나 심각도 열거 형을 전달해야합니다.

이 문제는 어떻게 해결해야합니까? Crystal 커뮤니티에 승인 된 솔루션이 있습니까?

답변

3

당신은 그런 예를

module MyApp 
    class_getter logger = Logger.new.tap { |l| l.level = Logger::WARN } 
end 

를 들어, 클래스에 로거를 배치 MyApp.logger.info("foo")와 함께 사용할 수 있습니다.

그러나 이것은 몇 가지 단점이 있습니다 :

  1. 로깅 수준이 세계, 당신은 당 클래스를 편집 할 수 없습니다. 도서관 내에서
  2. 로깅 (그들은 MyApp을 볼 수 없습니다)

은 어쩌면이를 논의하기 위해 크리스탈의 repo에 문제를 여는 가치가있을 것 불가능하다.