문제

로그 솔루션을 위해 존재하 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;
  }
}

이러한 방식으로 최종 개발자는 라이브러리 내부의 로그 레벨을 활성화 할 수 있습니다. 아무것도 활성화되지 않으면 모든 로깅 코드가 최종 제품 난독 화에서 제거됩니다. 달콤한 :)

/jaanussiim

다른 팁

미시적은 확실히 내기입니다. Log4J와 같은 Java Me (J2ME)를위한 작은 로깅 라이브러리입니다. 콘솔, 파일, 레코드 스토어, 캔버스, 양식, Bluetooth, 직렬 포트 (Bluetooth, IR, USB), 소켓 (SSL 포함), UDP, Syslog, MMS, SMS, 전자 메일 또는 Amazon S3에 로깅을 지원합니다. .

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

Proguard의 -assumenosideAffect를 사용하여 Fulletley를 사용하여 로깅 클래스를 제거 할 수 있습니다.

-assumenosideeffects public class logger.Logger {*;}

전처리하는 대신.

Symbian 자체에 의해 수정 된 Sun Virtual Machine이있는 Series60 및 UIQ 전화에는 표준 출력 리디렉션이 있습니다.

System.out뿐만 아니라 Thringable.printstacktrace ()도 작동 할 수 있습니다.

초기 핸드셋에서는 표준 라이브러리 서버 프로세스에 연결하는 C ++ 응용 프로그램을 작성해야합니다. Symbian은 콘솔 또는 파일에 VM 표준 출력을 캡처 할 수있는 리디렉터 응용 프로그램을 생성했습니다.

최신 핸드셋에서 VM 표준 출력을 Java Byte [] 또는 String Object (별도의 미드 렛에서 수행하려면)로 읽을 수있는 "GCF 프로토콜이 소개되었고 리디렉orctor 응용 프로그램이 다시 작성되었습니다. 자바.

Series60 3rd Edition Feature Pack 2 핸드셋 (및 나중에)에 사용 된 최신 J9 VM에서 대신 "Reliprect : // 테스트"를 시도해야 할 수도 있습니다.

나는 사용했다 미드 플로거 생산 애플리케이션에서 수용 가능한 수준으로, 스위트 등의 다른 미드 렛이 아닌 응용 프로그램에 통합 한 후 더 많이 사용된다는 것을 알았습니다. 나는 또한 발견했다 미시적 그러나 세부 사항에 사용하지 않았습니다.

나는 바이트 코드 최적화 프로그램의 형식 때문에 클래스할 수 있는 파일 포인트를 인코딩에 UTF 의 classname&있는 기능을 출력할 수 있습 로그 MyClass.someFunc()(할 수 있는 프로세스의 서명을 얻고 싶은 경우에는 유형)할 수있는 뭔가를 하는 C 스타일을 사용하여 디버깅 & 파일 매크로입니다.

로거 클래스의 조건부 편집을 사용한다고해서 간단한 문자열보다 더 많은 것을 기록하기 때문에 벌목 문을 완전히 제거하는 문제는 해결되지 않습니다. 가변 값을 찾은 다음 문자열로 조립합니다 (예 : Nowlog.log) ( "로드" + someclass.size () + "foos").

이제 허용 된 솔루션에 표시된대로 whatlylog.log의 본문 만 남기면 문자열 연결 (따라서 Stringbuffer Creation)을 포함하여 많은 불필요한 코드를 남겨 두게됩니다. 그렇기 때문에 Proguard (이미 언급)와 같은 바이트 코드 포스트 처리 도구를 사용하는 것이 좋습니다. Proguard의 -assumenosidefects를 사용하면 최적화가 로깅 진술뿐만 아니라 로깅 호출에 의해서만 사용되는 모든 코드를 제거 할 수 있습니다.

J2ME의 LWUIT 프레임 워크는 그 안에 명령문을 로그 할 수있는 로깅 양식을 제공합니다. 예외를 생성 할 수 있다고 생각하는 모든 장소에 로그를 추가 할 수 있습니다.

예 : log.getInstance (). showlog (); 위의 줄을 추가하면 J2ME 장치의 로깅을 추적 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top