में लॉग इन करना मैं अपने AKKA एप्लिकेशन पर लॉगबैक एमडीसी लॉगिंग को व्यवस्थित करना और अधिक जानकारीपूर्ण लॉग रखना चाहता हूं; हालांकि, मैंने यह भी पढ़ा है कि एमडीसी एकेकेए के साथ अच्छी तरह से काम नहीं कर सकता है क्योंकि AKKA में एसिंक्रोनस लॉगिंग सिस्टम है (एमडीसी एक अलग थ्रेड पर संग्रहीत किया जा सकता है)। मैंने एमडीसी लॉगिंग के लिए कस्टम डिस्पैचर का इस्तेमाल किया here मेरी समस्या को हल करने की उम्मीद कर रहा है लेकिन मैं इसे अपने आवेदन पर काम नहीं कर सकता। मेरा आवेदन हालांकि एक प्ले फ्रेमवर्क ऐप नहीं है।एमडीसी (मैप किए गए डायग्नोस्टिक संदर्भ) AKKA
मेरे पास RequestHandler
अभिनेता है जो विभिन्न प्रकार के अनुरोध प्राप्त करता है और इसे RequestSpecificHandler
अभिनेता को सौंपता है जो इसे संसाधित करेगा।
class RequestHandler() extends Actor with akka.actor.ActorLogging {
def receive: Receive = {
//Requests
case req: RequestA =>
org.slf4j.MDC.put("messageId", req.msgId)
org.slf4j.MDC.put("requestType", req.requestType)
log.debug("FIRST LOG Received a RequestA")
val actorA = context.ActorOf(ActorA.props)
actorA ! req.msg
case req: RequestB => //...
//other requests...
//Response
case res: ResponseA =>
log.debug("Received responseA")
org.slf4j.MDC.remove("messageId")
org.slf4j.MDC.remove("requestType")
//other response
}
}
मेरी RequestSpecificHandler
एक्टर्स में, मैं भी नए बनाने या मौजूदा HelperActors
class ActorA() extends Actor with akka.actor.ActorLogging {
val helperA = context.actorSelection("/user/helperA")
val helperB = context.actorOf("HelperB.props")
def receive: Receive = {
case msg: MessageTypeA =>
//do some stuff
log.debug("received MessageTypeA")
helperA ! taskForA
case doneByA =>
//do some stuff
log.debug("received doneByA")
helperB ! taskForB
case doneByB =>
log.debug("send reponseA")
sender ! ResponseA
}
}
लॉगिंग अलग है हर मैं एक अनुरोध भेज अन्य को देखें, कभी कभी यह सही MDC MessageId और requestType साथ लॉग करता है, कभी कभी ऐसा होता है कोई मूल्य नहीं है। यहां तक कि "FIRST LOG Received a RequestA"
लॉग इस तरह से व्यवहार करती है, मुझे लगता है यह हमेशा सही logstamp होना चाहिए के रूप में यह एक ही कक्षा मैं कहाँ MDC.put
यहाँ फोन में है मेरी application.conf है:
akka {
log-dead-letters = 10
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = DEBUG
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
actor{
default-dispatcher {
type = "some.package.monitoring.MDCPropagatingDispatcherConfigurator"
}
...
मैं कैसे कर सकते एमडीसी लॉगिंग जहां एक निश्चित अनुरोध के दौरान निष्पादित सभी कोड लॉग (निर्भरता lib लॉग सहित) में एक ही संदेश होगा, अनुरोध, टाइपस्टैम्प टाइप करें? क्या AKKA के लिए कस्टम डिस्पैचर से इसे करने के अन्य तरीके हैं? साथ ही, MDC.put
और MDC.remove
कोड घोषित करने के लिए एक और अधिक व्यवस्थित तरीका क्या है? अभी मैं इसे प्राप्त करने पर प्रत्येक मामले पर कर रहा हूँ।
धन्यवाद
मैंने http://stackoverflow.com/a/39320938/843660 – dskrvk