Logging em J2ME

votos
17

Que soluções o registo existe para J2ME?

Estou especialmente interessado em facilmente excluindo o registo para a versão release, para ter um pacote & memória menor pegada.

Publicado 23/09/2008 em 13:21
fonte usuário
Em outras línguas...                            


8 respostas

votos
19

Microlog é certo aposta. É uma biblioteca logging pequeno para Java ME (J2ME) como Log4j. Ele tem suporte para o log para o console, arquivo, RecordStore, Lona, Form, Bluetooth, uma porta serial (Bluetooth, IR, USB), Socket (SSL incl), UDP, Syslog, MMS, SMS, e-mail ou para o Amazon S3 .

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

Respondeu 23/09/2008 em 14:18
fonte usuário

votos
12

Se você estiver usando pré-processamento e ofuscação com Proguard, então você pode ter uma classe de log simples.

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

Ou fazer o registo onde quer que você precisa. Agora, se a propriedade release.build é definido como verdadeiro, este código será comentada, que irá resultar em um método vazio. Proguard irá remover todos os usos do método vazio - Com efeito compilação de lançamento terá todas as mensagens de depuração removidos.

Editar:

Pensando nisso no nível de biblioteca (Eu estou trabalhando em biblioteca J2ME mapeamento) Eu, provavelmente, encontrado uma solução melhor.

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

Este desenvolvedor fim forma pode permitir níveis de log dentro da biblioteca que ele / ela está interessado. Se nada será ativado, todo o código de registro será removido em ofuscação produto final. :) doce

/ JaanusSiim

Respondeu 23/09/2008 em 14:42
fonte usuário

votos
7

Você pode usar os -assumenosideaffects em proguard para completley remover a sua classe de log:

-assumenosideeffects public class logger.Logger {*;}

Em vez de ter de pré-processamento.

Respondeu 03/10/2008 em 10:59
fonte usuário

votos
3

O telefone Series60 e UIQ que tem uma máquina virtual Sun modificado por si só Symbian têm redirecionamento de saída padrão.

Não apenas você pode capturar System.out mas Throwable.printStackTrace () também funciona.

No início dos aparelhos, você precisa escrever um aplicativo C ++ que ganchos para o processo do servidor biblioteca padrão. Symbian produzido a aplicação Redirector que poderia capturar a saída padrão VM para um console ou um arquivo.

Em aparelhos mais novos, um "redirect: //" protocolo GCF foi introduzido que podia ler a saída padrão VM em um byte Java [] ou objeto String (você iria querer fazer isso em um MIDlet em separado) ea aplicação Redirector foi reescrito em Java.

Na mais recente J9 VM usado em Series60 3rd Edition Feature Pack 2 aparelhos (e posterior), você pode precisar de tentar "redirecionar: // test" em vez.

Respondeu 24/09/2008 em 13:07
fonte usuário

votos
1

Eu usei MIDPLogger a algum nível aceitável em um aplicativo de produção, apesar de eu tê-lo encontrado tem mais uso após integração no aplicativo, em vez de como um outro Midlet em suite ou assim por diante. Eu também achei Microlog , mas não tê-lo usado a qualquer grande detalhe.

Respondeu 23/09/2008 em 13:48
fonte usuário

votos
0

quadro LWUIT do J2ME fornecer a forma de registro que pode ter um registo de declaração dentro dela. Você pode adicionar o registro em cada lugar que você acha que pode gerar a exceção.

. Exemplo: Log.getInstance () showlog (); Ao adicionar a linha acima, você pode capaz de rastrear o registro nos dispositivos J2ME.

Respondeu 09/04/2012 em 07:04
fonte usuário

votos
0

Usando compilação condicional da classe logger não resolve o problema de remover completamente as declarações de registo, porque você vai muitas vezes registrar mais de uma corda simples. Você vai olhar para cima os valores das variáveis ​​e depois montá-los em cordas, por exemplo: WhateverLog.log ( "Loaded" + someclass.size () + "foos").

Agora, se você só deixar de fora o corpo de WhateverLog.log (como mostrado na solução aceita), você ainda vai deixar um monte de código desnecessário em, incluindo concatenação de String (e, portanto, uma criação StringBuffer). É por isso que é melhor usar uma ferramenta de pós-processamento código byte como proguard (já mencionado). -assumenosideeffects de Proguard permitirá que seu otimizador para remover não só as declarações de registro, mas também todo o código cujos resultados só seria usado pela chamada de registro.

Respondeu 08/11/2008 em 15:31
fonte usuário

votos
0

Eu escrevi um otimizador de bytecode, e por causa do formato de arquivos de classe que você pode apontar para a codificação UTF de classname & função que lhe permite logs de saída com MyClass.someFunc () (você pode processar a assinatura se você deseja obter os tipos ) que lhe permite fazer algo como o debug estilo C usando LINHA & ARQUIVO macros.

Respondeu 14/10/2008 em 19:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more