2013-09-21 2 views
7

정말 바보 같은 질문이지만, 어떻게하면 플레이 프레임 워크 2 (그리고 스칼라?)에서 로그 문자열의 형식을 편리하게 지정할 수 있습니까?스칼라의 Play Framework 2 로깅 구문

내가 봤지만 그 매우 어려운 예제를 찾으려면, 본질적으로 대부분의 링크는 내가 잘 해낸 첫 번째 Logback 구성에 대해 이야기하고있다.

나는 기본적으로 같은 것을 할 수있는 최선의 문체 방법을 찾으려고 노력 해요 : 당신이 할 수있는 가정 거라고 C#을 배경 (및 log4net)에서 오는

if(Logger.isDebugEnabled) 
    Logger.debug("Modified: Id = '" + real_session_id + "', Modified = " + modified.toString) 

뭔가 같은 :

if(Logger.isDebugEnabled) 
    Logger.debug("Modified: Id = '{0}', Modified = {1}", real_session_id, modified.toString) 

그러나 이것이 정의 된 방식으로 이것이 어떻게 작동하는지 나는 알 수 없습니다. 다시하지만, 작동하지 않는 나는 매우 찾을 수 있습니다 -

스칼라 매크로를 사용
Logger.debug("Modified: Id = ${real_session_id}, Modified = ${modified.toString}") 

: 나는 또한 당신이 같은 게으른 평가하는 구문을 사용하여 Logger.isDebugEnabled을 확인 피할 수하는 방법에 대한 모호한 참조를 본 적이 그것에 관한 정보가 거의 없습니다.

여기에 정말 뻔뻔스러운 것이 빠졌습니까?

답변

9
  1. 로깅에 사용되는 프레임 워크는 로그백입니다. 입력 할 때 Logger.debug, isDebugEnabled 이미 암시 적으로 검사됩니다.

  2. 로깅 구문은 스칼라 문자열 보간을 사용하십시오.

    Logger.debug(s"Modified: Id = '$real_session_id', Modified = $modified.toString") 
    
+0

그냥 내가 감사를 찾고 있어요 - 난 여전히 스칼라 멍청한 놈이야 아직 S-문자열을 못 했어! –

1

language/stdlib의 표준 문자열 보간 기능을 사용하지 않는 이유는 무엇입니까? http://docs.scala-lang.org/overviews/core/string-interpolation.html

귀하의 질문에 중요한 부분을 놓친 경우 사과드립니다.

로깅 프레임 워크는 그것으로 전달 된 인수에 대한 게으른 평가 방식의 일종을 제공하지 않는 경우 if (Logger.isDebugEnabled) 검사를 피할 수에 관해서는, 난 그냥 먼저 내 자신의 래퍼 정의 고려할 것 : 또한

object MyLazyLogger { 
    def debug(msg: => Any) = 
    if (Logger.isDebugEnabled) Logger.debug(msg) 
} 

을, I 문자열로 보간하는 방법이 로깅이 비활성화되어있는 경우 debug()에 대한 인수를 평가하지 않는 것과 관련이 있다고 생각하지 마십시오. debug()이 전달 된 인수를 열심히 평가한다고 선언하면 내가 할 수있는 방법이 없습니다. 문자열 보간의 "특수 형식"을 사용하여 호출 사이트에서 lazy evaluation으로 변경할 수 있습니다. (누군가가 나를 틀리게 증명하고 뭔가 새로운 것을 가르쳐 주면 행복 할거야 :))

공개 : 저는 아직 Play에 익숙하지 않아서 일반적인 접근 방법을 취하고 있습니다. .