2011-10-12 15 views
12

के लिए अक्का eventhandler का उपयोग निम्नलिखित दस्तावेज़ में ईवेंट हैंडलर्स प्रवेश की जगह लेने के रूप में वर्णित किया गया है http://akka.io/docs/akka/1.2/general/event-handler.htmlक्यों प्रवेश

एक घटना हैंडलर जो अक्का में एक प्रवेश प्रणाली की जगह लेता है:

akka.event.EventHandler

विशेष रूप से, इस लिंक ऐसा करने के तरीके slf4j का उपयोग करते समय का एक उदाहरण देता: http://akka.io/docs/akka/1.2/general/slf4j.html

मेरा प्रश्न 'यह क्या फायदे देना है? 'मानक पैटर्न का उपयोग कर लॉगर का उपयोग करने के बजाय मैं ऐसा क्यों करूं?'

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
... 
private static Logger log = LoggerFactory.getLogger(MyActor.class); 
... 
log.info("doing something"); 

वहाँ अंतर्निहित लाभ मैं चाहता हूँ किसी तरह का सूत्रण या डिस्पैचर internals के आधार पर है, इसके बाद के संस्करण लकड़हारा पैटर्न है कि मैं नहीं दिखाई दे रही है पर एक घटना हैंडलर का उपयोग करके? यदि नहीं, तो लॉगिंग के लिए इवेंट-हैंडलर का उपयोग करना किसी स्पष्ट कारण के लिए किसी परिचित पैटर्न से विचलित होने जैसा लगता है।

किसी भी इनपुट के लिए धन्यवाद!

उत्तर

11

लॉगिंग आम तौर पर आईओ है, जो नीचे अपने कोड के संचालन धीमा कर सकते हैं मतलब है। एक अभिनेता जहां प्रत्येक संदेश आपके प्राप्त विधि में संसाधित किया जाना चाहिए एकल फ़ाइल के संदर्भ में, इस भूमि के ऊपर कर सकते हैं, कुछ मामलों में, परिमाण अंतर का एक आदेश (या अधिक) समय है कि विधि को पूरा करने के लिए में हैं। यह पहले से ही Erlang आधारित प्रणाली के भीतर एक आम पैटर्न धागे के नियंत्रण के प्रवाह के बाहर प्रवेश ले जाने के लिए (या प्रक्रिया Erlang क्षेत्र में,) है कि ब्लॉक प्राप्त चल रहा है है। यदि आपके अभिनेता प्राप्तकर्ता ब्लॉक के समय पर भारी निर्भर नहीं हैं, तो आप हमेशा मानक लॉगिंग पैटर्न पर वापस आ सकते हैं यदि इससे आपके लिए चीजें आसान हो जाती हैं, लेकिन शायद इवेंट हैंडलर-आधारित दृष्टिकोण में उपयोग करना एक अच्छा विचार है।

+0

धन्यवाद थॉमस, कि अच्छा बनाता है समझ। मैं आगे बढ़ गया और EventHandler.info() आदि विधियों का उपयोग करने के लिए अपने कलाकारों में लॉगिंग बदल दी। ऐसा लगता है कि मेरी log4j.xml फ़ाइल में निर्दिष्ट मेरे पैटर्न लेआउट का सम्मान नहीं किया जा रहा है, लेकिन मैं कम से कम अपने आईएनएफओ स्तर संदेश देख रहा हूं। –

+1

असीमित लॉगिंग थोड़ा खतरनाक लगता है। मेरे पास क्या गारंटी है कि ए) लॉग विवरण सही क्रम में आते हैं और बी) कि इवेंट हैंडलर शेष सिस्टम के साथ जारी रखने में सक्षम है (यदि लॉगिंग सिस्टम का सबसे धीमा हिस्सा है, तो लॉग कतार बढ़ेगी और एक आउटऑफ मेमरी होने तक बढ़ता है)। क्या यह त्रुटियों को सिंक्रनाइज़ करने के लिए समझ में आता है? –

+0

यदि आप ऑर्डर करने के बारे में एक विशिष्ट अनुक्रम या गारंटी पर निर्भर करते हैं, तो शायद एक अभिनेता-आधारित दृष्टिकोण आपके लिए सही नहीं है।उस ने कहा, चूंकि लॉगिंग स्वयं एक अभिनेता द्वारा संभाली जाती है और अभिनेताओं को उनके संदेश दिए गए क्रम में दिए जाते हैं, यह कोई समस्या नहीं होनी चाहिए। इसके अलावा, अक्का के पास एक बहुत ही ठोस संदेश क्यूइंग कार्यान्वयन है जो आपकी आवश्यकताओं के लिए समायोज्य/ट्यून करने योग्य भी है। आप बफर बह निकला बारे में चिंतित हैं तो आप एक घिरे संदेश कतार का उपयोग करें और अपनी खुद की प्रवेश हैंडलर यह का उपयोग करता है बना सकते हैं (मुझे यकीन है कि क्या की सीमा अक्का डिफ़ॉल्ट रूप से है नहीं कर रहा हूँ)। –

0

@DParsin, आप के साथ अपने classpath में application.conf फ़ाइल है की आवश्यकता होगी कम से कम निम्न:

akka { 
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"] 
    loglevel = DEBUG 
    stdout-loglevel = INFO 
} 

और उसके बाद निश्चित रूप से भी सुनिश्चित करें कि आप logback उपयोग कर रहे हैं (या slf4j-log4j आदि)। यदि आपके क्लासपाथ में लॉगबैक-क्लासिक-1.0.0.jar है, तो सुनिश्चित करें कि आपके क्लासपाथ में आपके पास कोई अन्य SLF4J एडाप्टर नहीं है।

0
अक्का 1.2 में Slf4jEventHandler का उपयोग कर सावधान रहें

। आप बनाम

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
... 
private static Logger log = LoggerFactory.getLogger(MyActor.class); 
... 
log.info("doing something"); 

कारण एक प्रति वर्ग आधार पर प्रवेश स्तर सेट करने की क्षमता खो जा रहा है Slf4jEventHandler "akka.event.slf4j.Slf4jEventHandler" के नाम के साथ केवल एक लकड़हारा का उपयोग करता

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