2013-03-06 4 views
17

हमें Play 2.0.4 एप्लिकेशन के भीतर हमारे अक्का अभिनेताओं में त्रुटियों का पता लगाने और जांच करने में कठिनाई हो रही है।अक्का अभिनेताओं में बेजोड़ अपवादों को कैसे लॉग किया जाए?

किसी को सभी उपयोगी स्टैकट्रैस के साथ लॉग इन करने के लिए अक्का कलाकारों में बेजोड़ अपवाद कैसे प्राप्त होते हैं?

सबसे अच्छा हम अब तक ऐसा करने में सक्षम किया गया है जोड़ने के लिए है निम्नलिखित application.conf रहे हैं:

logger.akka=DEBUG 

akka { 
    loglevel = DEBUG 
    stdout-loglevel = DEBUG 
    loggers = ["akka.event.slf4j.Slf4jLogger"] 
    actor { 
     debug { 
      receive = on 
      autoreceive = on 
      fsm = on 
      lifecycle = on 
      unhandled = on 
      event-stream = on 
      router-misconfiguration = on 
     } 
    } 
} 
हालांकि

, अभिनेता दिया:

class ThrowingActor{ 
    def receive = { 
    case _ => { 
     throw new Exception("--------------ASDFASDFASDFASDFASDFASDFASDF------------------") 
    } 
    } 
} 

सभी कि हम लॉग इन किया जा रहा देखें है:

[DEBUG] [03/06/2013 16:15:44.311] [application-akka.actor.default-dispatcher-16] [Future] --------------ASDFASDFASDFASDFASDFASDFASDF------------------ 

क्या कोई भी हमें हमारे सभी में सूचनात्मक स्टैकरट्रैस प्राप्त करने में मदद कर सकता है ctors, जब एक अपवाद अपवाद है?

धन्यवाद।

+0

अजीब है एक छोटे से मामले में stackable होने की विशेषता स्थापित करने के लिए refactor सकता है। इसे डिफ़ॉल्ट रूप से सभी अपवादों को लॉग करना चाहिए। – sourcedelica

+0

अपने लॉगर (log4j/logback/etc) कॉन्फ़िगरेशन की जांच करें। अक्का स्टैक ट्रेस के साथ ERROR स्तर पर अपवाद लॉग करेगा। – sourcedelica

+0

आप 2.2-एम 1 या मास्टर के अनुरूप कॉन्फ़िगरेशन सेटिंग्स का उपयोग कर रहे हैं, क्या यह आपके जेएआर से मेल खाता है? –

उत्तर

0

जब आप slf4j लॉगर का उपयोग करते हैं तो अक्का की लॉगिंग कॉन्फ़िगरेशन अब उपयोग नहीं की जाती है।

  • परिवर्तन logback.xml, logback.groovy या logback-test.xml
  • परिवर्तन log4j.xml या log4j.properties
  • एक logback जोड़ें: अपने प्रवेश ढांचे और सेटअप के आधार पर, आप के लिए हो सकता है या log4j जार आपके क्लासपाथ

आमतौर पर जब सिस्टम स्पिन करता है तो यह लॉगिंग फ्रेमवर्क के बारे में कुछ विवरण प्रिंट करता है (विशेष रूप से यदि यह गलत कॉन्फ़िगर किया गया है)। कई कारण हो सकते हैं, लेकिन आप गलत कॉन्फ़िगरेशन फ़ाइल में देख रहे हैं।

7

आप बॉक्स अक्का में निपटने से बाहर नहीं मिल रहा है, तो आप इतना की तरह अपने अभिनेताओं में मिश्रण के लिए एक सरल विशेषता बना सकते हैं:

import akka.actor._ 

trait UnhandledExceptionLogging{ 
    self: Actor with ActorLogging => 

    override def preRestart(reason:Throwable, message:Option[Any]){ 
    super.preRestart(reason, message) 
    log.error(reason, "Unhandled exception for message: {}", message) 
    } 
} 

class MyActor extends Actor with ActorLogging with UnhandledExceptionLogging{ 
    def receive = { 
    case _ => 
     throw new Exception("blah blah") 
    } 
} 

पूर्व पुनः आरंभ जब न आया हुआ अपवाद बुलाया जाएगा हुआ है और अभिनेता फिर से शुरू होने वाला है। अपने स्वयं के अधिक विस्तृत लॉगिंग में हुक करने के लिए एक अच्छी जगह की तरह लगता है। बोनस के रूप में, प्राप्त संदेश जो विफलता का कारण लॉग के भीतर अतिरिक्त संदर्भ के लिए उपलब्ध है।

आप भी इस कोड आप अन्य अभिनेताओं कि पहले से ही अधिभावी गया preRestart

+1

आप शायद super.preRestart (कारण, संदेश) में एक कॉल जोड़ना चाहते हैं, या फिर आपके अभिनेता की पोस्टस्टॉप विधि नहीं कहा जाएगा। – user2089674

+0

@ user2089674, अच्छा बिंदु। मैंने जवाब – cmbaxter

+5

के अनुसार उत्तर अपडेट किया है यह विशेषता संकलित नहीं होती है। कंपाइलर का कहना है कि super.preRestart को नहीं कहा जा सकता है। – Vistritium

संबंधित मुद्दे