2008-09-23 8 views
17

में लॉग इन करना j2me के लिए कौन से लॉगिंग समाधान मौजूद हैं?जे 2 एमई

मैं विशेष रूप से "रिलीज" संस्करण के लिए लॉगिंग को छोड़कर आसानी से दिलचस्पी लेता हूं, ताकि एक छोटा पैकेज & मेमोरी पदचिह्न हो।

उत्तर

12

आप Proguard साथ पूर्व प्रसंस्करण कहानियो का उपयोग कर रहे हैं, तो आप एक साधारण प्रवेश वर्ग हो सकता है।

public class Log { 
    public static void debug(final String message) { 
    //#if !release.build 
    System.out.println(message); 
    //#endif 
    } 
} 

या जहां कहीं भी आपको आवश्यकता है लॉगिंग करें। अब, अगर रिलीज.बिल्ड संपत्ति सत्य पर सेट है, तो इस कोड पर टिप्पणी की जाएगी, जिसके परिणामस्वरूप एक खाली विधि होगी। प्रोगार्ड खाली विधि के सभी उपयोगों को हटा देगा - असल में रिलीज बिल्ड में सभी डीबग संदेशों को हटा दिया जाएगा।

संपादित करें:

पुस्तकालय स्तर (मैं मानचित्रण जे 2 एमई पुस्तकालय पर काम कर रहा हूँ) मैं कर दिया है, शायद, एक बेहतर समाधान पाया पर इसके बारे में सोच रही थी।

public class Log { 
    private static boolean showDebug; 

    public static void debug(final String message) { 
    if (showDebug) { 
     System.out.println(message); 
    } 
    } 

    public static void setShowDebug(final boolean show) { 
    showDebug = show; 
    } 
} 

इस तरह अंत डेवलपर पुस्तकालय वह/वह में रुचि रखता है कि अंदर लॉग स्तरों सक्षम कर सकते हैं। कुछ भी नहीं सक्षम कर दिया जाएगा, तो सभी प्रवेश कोड अंत उत्पाद कहानियो में निकाल दिया जाएगा। मीठे :)

/JaanusSiim

+0

का उपयोग करके अपना खुद का रोल करूंगा दूसरे कोड में कोड कैसे हटाया जाएगा? आपने प्रीप्रोकैसिंग कमांड को हटा दिया है – Casebash

+0

प्रीप्रोकैसिंग भाग 'Log.setShowDebug (true)' के आस-पास एप्लिकेशन कोड में है। इस तरह 'शोडेबग' हमेशा झूठा होगा और प्रोगार्ड जादू होगा। आपको ऑप्टिमाइज़ेशन पास नंबर के साथ खेलना पड़ सकता है। – JaanusSiim

1

मैंने उत्पादन अनुप्रयोग में कुछ स्वीकार्य स्तर पर MIDPLogger का उपयोग किया है, हालांकि मुझे पता चला है कि इसे सूट में या तो आगे के मिडलेट के बजाय एप्लिकेशन में एकीकृत करने के बाद इसका अधिक उपयोग होता है। मुझे MicroLog भी मिला लेकिन इसका उपयोग किसी भी बड़े विवरण में नहीं किया है।

19

माइक्रोलॉग निश्चित शर्त है। यह Java ME (J2ME) के लिए Log4j की तरह एक छोटी लॉगिंग लाइब्रेरी है। इसमें कंसोल, फ़ाइल, रिकॉर्डस्टोर, कैनवास, फॉर्म, ब्लूटूथ, एक सीरियल पोर्ट (ब्लूटूथ, आईआर, यूएसबी), सॉकेट (एसएसएल सहित), यूडीपी, सिस्लॉग, एमएमएस, एसएमएस, ई-मेल या अमेज़ॅन एस 3 पर लॉगिंग के लिए समर्थन है ।

http://sourceforge.net/projects/microlog/

+0

माइक्रोलॉग बहुत अच्छा लग रहा है, लेकिन इसे सीएलडीसी 1.1 – Casebash

+1

की आवश्यकता है मुझे एक लाइब्रेरी मिली [जे 4me] (http://code.google.com/p/j4me/wiki/Logging) जो किसी भी डिवाइस पर चलती है। यदि आप इसे प्रबंधित कर सकते हैं तो Microlog बेहतर दिखता है हालांकि – Casebash

+0

असल में, जे 4 एम मेरी आवश्यकताओं के लिए बहुत सरल दिखता है (केवल वास्तव में लॉगिंग स्तर प्रदान करता है)। मुझे लगता है कि मैं प्रोगार्ड – Casebash

3

Series60 और UIQ फोन एक सूर्य आभासी मशीन सिम्बियन द्वारा संशोधित है जो अपने आप मानक आउटपुट पुनर्निर्देशन की है।

न केवल आप System.out पर कब्जा कर सकते हैं लेकिन Throwable.printStackTrace() भी काम करता है।

शुरुआती हैंडसेट पर, आपको एक सी ++ एप्लिकेशन लिखना होगा जो मानक लाइब्रेरी सर्वर प्रक्रिया में हुक करता है। सिम्बियन ने रेडियोधर्मी एप्लिकेशन का उत्पादन किया जो वीएम मानक आउटपुट को कंसोल या फ़ाइल में कैप्चर कर सकता था।

नए हैंडसेट पर, "रीडायरेक्ट: //" जीसीएफ प्रोटोकॉल पेश किया गया था जो जावा बाइट [] या स्ट्रिंग ऑब्जेक्ट में वीएम मानक आउटपुट पढ़ सकता है (आप इसे एक अलग मिडलेट में करना चाहते हैं) और रेडियोधर्मी एप्लिकेशन जावा में फिर से लिखा गया था।

सीरीज़ 60 तीसरी संस्करण फ़ीचर पैक 2 हैंडसेट (और बाद में) में उपयोग किए गए नवीनतम जे 9 वीएम पर, आपको इसके बजाय "रीडायरेक्ट: // टेस्ट" करने की आवश्यकता हो सकती है। बल्कि preprocess के लिए होने से

-assumenosideeffects public class logger.Logger {*;} 

:

7

आप अपने प्रवेश वर्ग को दूर करने के लिए completley ProGuard में -assumenosideaffects उपयोग कर सकते हैं।

0

मैं एक बाईटकोड अनुकूलक लिखा था, और वर्ग फ़ाइलों के प्रारूप की वजह से आप classname & समारोह के UTF एन्कोडिंग जो MyClass.someFunc (साथ उत्पादन लॉग करने की अनुमति देता को इंगित कर सकते हैं) (आप हस्ताक्षर की प्रक्रिया अगर तुम चाहते हो सकता है प्रकार प्राप्त करने के लिए) जो आपको लाइन & FILE मैक्रोज़ का उपयोग करके सी शैली डीबग की तरह कुछ करने की अनुमति देता है।

0

लॉगर वर्ग के सशर्त संकलन का उपयोग करना लॉगिंग स्टेटमेंट को पूरी तरह से हटाने की समस्या का समाधान नहीं करता है क्योंकि आप अक्सर एक साधारण स्ट्रिंग से अधिक लॉग इन करेंगे। आप परिवर्तनीय मानों को देखेंगे और फिर उन्हें तारों में इकट्ठा करेंगे, उदाहरण: जो भी Log.log ("लोड किया गया" + someclass.size() + "foos")।

अब अगर आप केवल जो भीLog.log (जैसा कि स्वीकृत समाधान में दिखाया गया है) के शरीर को छोड़ दें, तो आप अभी भी स्ट्रिंग कॉन्सटेनेशन (और इस प्रकार एक स्ट्रिंगबफर निर्माण) सहित बहुत सारे अनावश्यक कोड छोड़ देंगे। यही कारण है कि आप बेहतर ढंग से एक बाइट कोड पोस्ट प्रोसेसिंग टूल जैसे प्रोगोगर्ड (पहले से उल्लिखित) का उपयोग करेंगे। प्रोगुआर्ड-वासुमेनोसाइडफ्रेट्स अपने अनुकूलक को न केवल लॉगिंग स्टेटमेंट को हटाने की अनुमति देगा बल्कि सभी कोड भी जिनके परिणाम केवल लॉगिंग कॉल द्वारा उपयोग किए जाएंगे।

+1

मुझे असहमत होना है: पी जैसा कि उल्लेख किया गया है - यह केवल काम करता है यदि आप प्रोगार्ड का उपयोग करते हैं। डीबग() विधि की सामग्री पर टिप्पणी करने के बाद, आपके पास एक खाली विधि होगी जिसे प्रोग्रार्ड द्वारा हटा दिया जाएगा। इसका मतलब यह होगा कि सभी विधि कॉल भी हटा दिए जाएंगे - आपके पास कोई बेकार कोड नहीं होगा;) – JaanusSiim

+0

कई लॉगिंग लाइब्रेरी इस कारण से प्रारूप स्ट्रिंग का उपयोग करते हैं। तो कॉल कुछ भी होगा 'WhateverLog.log ("लोड% d foos", someclass.size()); '। स्वरूपण केवल तभी किया जाता है जब लॉगिंग सक्षम हो। आदर्श रूप से, यदि संभव हो तो आप अतिरिक्त 'आकार' कॉल करने से भी बचेंगे। –

0

जे 2 एमई का एलडब्ल्यूयूआईटी ढांचा लॉगिंग फॉर्म प्रदान करता है जिसमें इसके अंदर बयान लॉग हो सकता है। आप प्रत्येक स्थान पर लॉग जोड़ सकते हैं जो आपको लगता है कि अपवाद उत्पन्न हो सकता है।

उदाहरण: Log.getInstance()। ShowLog(); उपर्युक्त रेखा जोड़कर आप जे 2 एमई उपकरणों में लॉगिंग को ट्रैक करने में सक्षम हो सकते हैं।

+0

अच्छा, कि आप पुरानी पोस्ट देख रहे हैं – Lucifer

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