Estou tentando gravar logs no arquivo Log.txt personalizado no arquivo Android usando esse código meu, mas esse método cria um arquivo, mas não contém nada. Basicamente, quero ler o conteúdo anterior do arquivo e anexar meus dados ao conteúdo existente.
O código é o seguinte:
public static void write(String str)
{
InputStream fileInputStream = null;
FileOutputStream fileOutpurStream = null;
try
{
fileInputStream = new FileInputStream(file);
fileOutpurStream = new FileOutputStream(file);
if(file.exists())
{
int ch = 0;
int current = 0;
StringBuffer buffer = new StringBuffer();
while((ch = fileInputStream.read()) != -1)
{
buffer.append((char) ch);
current++;
}
byte data[]=new byte[(int)file.length()];
fileInputStream.read(data);
fileOutpurStream.write(data);
fileOutpurStream.write(str.getBytes(),0,str.getBytes().length);
fileOutpurStream.flush();
}
else
{
file.createNewFile();
fileOutpurStream.write(str.getBytes(),0,str.getBytes().length);
fileOutpurStream.flush();
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
fileInputStream.close();
fileOutpurStream.flush();
fileOutpurStream.close();
fileOutpurStream = null;
fileInputStream = null;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
buf.close()
fique dentro de umfinally
bloco.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
foi o que @ virusss8 significava, é claro.Para quem é iniciante no Java em geral e no Android
Algumas opções para registrar no txt no Android estão abaixo
logcat -f
como neste resposta para fazer logon no arquivo. Observe que no Android 4.2, a permissão READ_LOGS não tem impacto e todos os aplicativos (a menos que o telefone esteja enraizado) só podiam ler seus próprios registros. A desvantagem aqui é que o buffer do logcat é circular e tem um limite de tamanho. Você pode não obter logs anteriores.Use Log4j com android-logging-log4j . O que faz o android-logging-log4j? Isso torna o Log4j mais fácil de usar no Android, oferecendo duas funções.
Exemplo simples abaixo. Observe que o
logger
objeto no exemplo abaixo é um objeto Log4j retornado e não uma classe android-logging-log4j. Portanto, android-logging-log4j é usado apenas para configurar o Log4j.Etapas para usar o Log4j no Android.
Adicione log4j-1.2.x.jar e android-logging-log4j-1.0.3.jar à pasta libs.
Adicione permissões apenas se estiver usando armazenamento externo
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Gravar
Log4j
classe auxiliarNa classe Activity
Fonte de exemplo . Observe que o log4j 2.x (funcionalidades aprimoradas) reescrito do zero não é compatível com o log4j 1.x. Então você precisa usar o jar log4j 1.2.x com o jar android-logging-log4j. Consegui fazer logon no arquivo interno do aplicativo e, posteriormente, enviá-lo por e-mail com
setReadable(true, false)
fonte
microlog4android funciona para mim, mas a documentação é muito pobre. Tudo o que eles precisam adicionar é um tutorial de início rápido .
Aqui está um rápido tutorial que encontrei.
Adicione a seguinte variável estática na sua Atividade principal:
Adicione o seguinte ao seu
onCreate()
método:Crie um arquivo nomeado
microlog.properties
e armazene-o noassets
diretórioEdite o
microlog.properties
arquivo da seguinte maneira:Adicione instruções de log como esta:
Para cada classe, você cria um objeto de logger, conforme especificado em 1)
6.Você pode adicionar a seguinte permissão:
Aqui está a fonte do tutorial
fonte
Aviso: Posso estar entendendo totalmente mal você, mas se tudo o que você quer é um arquivo de log, por que suar?
Coloque isso em um arquivo bat (altere o caminho para o diretório de ferramentas e yourappname é, obviamente, o nome do seu aplicativo):
Então, no seu código, faça algo semelhante a este:
Para criar o log, conecte o cabo USB e execute seu arquivo bat.
Saudações
fonte
Use slf4android lib.
É simples implementação do slf4j api usando o Android java.util.logging. *.
Recursos:
LoggerConfiguration.configuration().addHandlerToLogger
slf4android é mantido principalmente por @miensol .
Leia mais sobre slf4android em nosso blog:
fonte
Você deve dar uma olhada no microlog4android. Eles têm uma solução pronta para fazer logon em um arquivo.
http://code.google.com/p/microlog4android/
fonte
Isso pode ser tarde, mas espero que isso ajude. Tente isso ....
aqui
bfwritter.newline
escreve seu texto no arquivo E adicione a permissãono seu arquivo de manifesto sem falha.
fonte
Resolvi esse problema com o seguinte trecho de código na linha de comando:
Onde a opção "hora" adiciona detalhes do campo de metadados para data, hora da chamada, prioridade / tag e PID do processo que emite a mensagem.
Em seguida, no seu código, faça algo semelhante a este (usando android.util.Log):
fonte
adb
está conectado, mas não funciona quando o dispositivo está no modo autônomo. Eu não o usaria na produção, mas é uma solução simples no modo de depuração.Em geral, você deve ter um identificador de arquivo antes de abrir o fluxo. Você tem um identificador fileOutputStream antes de createNewFile () no bloco else. O fluxo não cria o arquivo se ele não existir.
Não é realmente específico para o Android, mas é muito IO para esse fim. E se você fizer muitas operações de "gravação" uma após a outra? Você estará lendo todo o conteúdo e escrevendo o conteúdo inteiro, levando tempo e, mais importante, a duração da bateria.
Sugiro usar java.io.RandomAccessFile, seek () até o final e writeChars () para acrescentar. Será um código muito mais limpo e provavelmente muito mais rápido.
fonte
Eu criei uma classe simples e leve (cerca de 260 LoC) que estende a implementação padrão do android.util.Log com o log baseado em arquivo:
Toda mensagem de log é registrada via android.util.Log e também é gravada em um arquivo de texto no dispositivo.
Você pode encontrá-lo no github:
https://github.com/volkerv/FileLog
fonte
Após muito tempo de investigação, descobri que:
android.util.Log
por uso padrãojava.util.logging.Logger
logger
com nome""
, para obter uma instância dele, useLogManager.getLogManager().getLogger("")
logger
instância do LogCatcom.android.internal.logging.AndroidHandler
após a execução dos aplicativos de depuraçãocom.android.internal.logging.AndroidHandler
imprime mensagens para logcat apenas com níveis mais altos quejava.util.logging.Level.INFO
, como (Level.INFO, Level.WARNING, Level.SEVERE, Level.OFF
)Então, para escrever logs em um arquivo, basta
rootLogger
""
adicionar umjava.util.logging.FileHandler
:Para imprimir todos os registradores no seu aplicativo, use:
fonte
Esta variante é muito mais curta
fonte
Você pode usar a biblioteca que escrevi. É muito fácil de usar:
Adicione esta dependência ao seu arquivo gradle:
Inicialize a biblioteca na classe Application:
É assim que você usa a biblioteca:
E é assim que recuperar os logs:
Aqui está o link para a página do github com mais informações: https://github.com/danylovolokh/AndroidLogger
Espero que ajude.
fonte
Muitas das versões anteriores do log4j não funcionam agora (05/2019). Mas você pode usar o Hyperlog - posso confirmar que funciona.
Adicione esta linha ao seu projeto de dependências e sincronização
Crie uma nova classe de aplicativo (crie uma nova classe java e estenda o aplicativo). Em seguida, no método onCreate, adicione estas linhas:
Altere o arquivo de manifesto para definir o arquivo do aplicativo.
Maneiras diferentes de registrar:
Encontre seus arquivos de log. Navegar para
fonte