سؤال

ما هي حلول التسجيل الموجودة لـ j2me؟

أنا مهتم على وجه التحديد باستبعاد التسجيل بسهولة لإصدار "الإصدار"، للحصول على حزمة أصغر وبصمة ذاكرة.

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم المعالجة المسبقة والتشويش مع Proguard، فيمكنك الحصول على فئة تسجيل بسيطة.

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

أو قم بالتسجيل في أي مكان تحتاج إليه.الآن، إذا تم ضبط الخاصية Release.build على true، فسيتم التعليق على هذا الكود، مما سيؤدي إلى طريقة فارغة.سوف يقوم Proguard بإزالة جميع استخدامات الطريقة الفارغة - في الواقع، سيؤدي إصدار الإصدار إلى إزالة جميع رسائل تصحيح الأخطاء.

يحرر:

بالتفكير في الأمر على مستوى المكتبة (أعمل على رسم خريطة لمكتبة J2ME) ربما وجدت حلاً أفضل.

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;
  }
}

بهذه الطريقة يمكن للمطور النهائي تمكين مستويات السجل داخل المكتبة التي يهتم بها.إذا لم يتم تمكين أي شيء، فستتم إزالة كافة رموز التسجيل في تشويش المنتج النهائي.حلو :)

/جانوسسيم

نصائح أخرى

MicroLog هو الرهان المؤكد.إنها مكتبة تسجيل صغيرة لـ Java ME (J2ME) مثل Log4j.لديه دعم لتسجيل الدخول إلى وحدة التحكم، أو الملف، أو RecordStore، أو Canvas، أو النموذج، أو Bluetooth، أو المنفذ التسلسلي (Bluetooth، IR، USB)، المقبس (بما في ذلك SSL)، UDP، Syslog، MMS، SMS، البريد الإلكتروني أو Amazon S3 .

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

يمكنك استخدام -assumenosideaffects في proguard لإزالة فئة التسجيل الخاصة بك بالكامل:

-assumenosideeffects public class logger.Logger {*;}

بدلاً من الاضطرار إلى المعالجة المسبقة.

يحتوي هاتف Series60 وUIQ الذي يحتوي على جهاز Sun الظاهري الذي تم تعديله بواسطة Symbian نفسه على إعادة توجيه الإخراج القياسي.

لا يمكنك فقط التقاط System.out ولكن Throwable.printStackTrace() يعمل أيضًا.

في الهواتف القديمة، ستحتاج إلى كتابة تطبيق C++ يرتبط بعملية خادم المكتبة القياسية.أنتجت شركة Symbian تطبيق Redirector الذي يمكنه التقاط مخرجات VM القياسية إلى وحدة تحكم أو ملف.

على الهواتف الأحدث، تم تقديم بروتوكول GCF "redirect://" الذي يمكنه قراءة مخرجات VM القياسية إلى Java byte[] أو كائن String (قد ترغب في القيام بذلك في MIDlet منفصل) وتمت إعادة كتابة تطبيق Redirector في جافا.

على أحدث جهاز J9 VM المستخدم في هواتف Series60 3rd Edition Features Pack 2 (والإصدارات الأحدث)، قد تحتاج إلى تجربة "redirect://test" بدلاً من ذلك.

لقد استخدمت MIDPlogger إلى مستوى مقبول في تطبيق الإنتاج، على الرغم من أنني وجدت أن له استخدامًا أكبر بعد الدمج في التطبيق بدلاً من استخدامه كـ Midlet آخر في المجموعة أو ما إلى ذلك.لقد وجدت أيضا سجل صغير ولكن لم تستخدمها لأية تفاصيل كبيرة.

لقد كتبت مُحسِّن رمز بايت، وبسبب تنسيق ملفات الفئة، يمكنك الإشارة إلى تشفير UTF لاسم الفئة والوظيفة الذي يسمح لك بإخراج السجلات باستخدام MyClass.someFunc() (يمكنك معالجة التوقيع إذا كنت تريد الحصول على الأنواع ) والذي يسمح لك بالقيام بشيء مثل تصحيح أخطاء النمط C باستخدام خط & ملف وحدات الماكرو.

لا يؤدي استخدام الترجمة الشرطية لفئة المسجل إلى حل مشكلة إزالة بيانات التسجيل بالكامل، لأنك ستسجل في كثير من الأحيان أكثر من مجرد سلسلة بسيطة.سوف تبحث عن قيم متغيرة ثم تقوم بتجميعها في سلاسل، على سبيل المثال:مهما كان Log.log("تم التحميل" + someclass.size() + "foos").

الآن، إذا تركت نص WhatLog.log فقط (كما هو موضح في الحل المقبول)، فسوف تظل تترك الكثير من التعليمات البرمجية غير الضرورية، بما في ذلك تسلسل السلسلة (وبالتالي إنشاء StringBuffer).لهذا السبب من الأفضل استخدام أداة معالجة نشر رمز البايت مثل proguard (التي سبق ذكرها).ستسمح تأثيرات -assumenoside Effects الخاصة بـ Proguard للمُحسِّن الخاص به ليس فقط بإزالة بيانات التسجيل ولكن أيضًا جميع التعليمات البرمجية التي سيتم استخدام نتائجها فقط من خلال استدعاء التسجيل.

يوفر إطار عمل LWUIT الخاص بـ J2ME نموذج التسجيل الذي يمكن أن يحتوي على بيان تسجيل بداخله.يمكنك إضافة السجل في كل مكان تعتقد أنه قد يولد الاستثناء.

مثال :Log.getInstance().showLog();بإضافة السطر أعلاه يمكنك تتبع التسجيل في أجهزة J2ME.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top