2017-10-02 7 views
0

의 특징은 ActorLoggingDiagnosticActorLogging의 차이점은 무엇이며 언제 다른 하나를 선호해야합니까? docs의 간략한 설명은 많은 안내를 제공하지 않습니다.Akka에서 ActorLogging 특성 대신 DiagnosticActorLogging을 사용하는 경우?

/** 
* Scala API: Mix in DiagnosticActorLogging into your Actor to easily obtain a reference to a logger with MDC support, 
* which is available under the name "log". 
* In the example bellow "the one who knocks" will be available under the key "iam" for using it in the logback pattern. 
* 
* {{{ 
* class MyActor extends Actor with DiagnosticActorLogging { 
* 
* override def mdc(currentMessage: Any): MDC = { 
*  Map("iam", "the one who knocks") 
* } 
* 
* def receive = { 
*  case "pigdog" => log.info("We've got yet another pigdog on our hands") 
* } 
* } 
* }}} 
*/ 
trait DiagnosticActorLogging extends Actor { 
    import akka.event.Logging._ 
    val log = akka.event.Logging(this) 
    def mdc(currentMessage: Any): MDC = emptyMDC 

    override protected[akka] def aroundReceive(receive: Actor.Receive, msg: Any): Unit = try { 
    log.mdc(mdc(msg)) 
    super.aroundReceive(receive, msg) 
    } finally { 
    log.clearMDC() 
    } 
} 

기본적으로는 암시 적으로 모든 혼란없이 배우의 모든 로깅 호출에 로깅 데이터의 일부 공유 조각을 연결할 수 있습니다 : 그것을 알아낼

답변

0

MDC를 사용하면 기록한 메시지에 추가 컨텍스트를 추가 할 수 있습니다. 예를 들어, MDC 맵 user-id 삽입 기록 패턴 %5p %X{user-id} %m%n와 템플릿 필드 %X{user-id}

DiagnosticActorLogging에게 mdc에 쉽게 접근을 제공하며, 설정 및 액터에 의해 처리 된 각 메시지 MDC 클리어 돌봐의 값을 대체한다. 좀 더 잘 이해하려면 DiagnosticActorLogging 특성에 aroundReceive 방법을보십시오.

0

가장 쉬운 방법은 DiagnosticActorLogging 소스를 확인 이동하는 것입니다 그들을 명시 적으로 추가. 응용 프로그램에 따라 호스트 이름, 요청 ID, 클라이언트 ID, jar 버전, 빌드 날짜, 끝점 등과 같은 항목에 유용 할 수 있습니다.