Pergunta

Para fins de depuração em um sistema um tanto fechado, preciso enviar texto para um arquivo.

Alguém conhece uma ferramenta executada em Windows (baseada em console ou não) que detecta alterações em um arquivo e as gera em tempo real?

Foi útil?

Solução

Outras dicas

Gosto de ferramentas que realizam mais de uma tarefa, o Notepad++ é um ótimo substituto do bloco de notas e possui um plugin Document Monitor (instala com msi padrão) que funciona muito bem.Ele também é portátil para que você possa tê-lo em um pen drive para usar em qualquer lugar.

Para uma opção de linha de comando, o PowerShell (que é realmente uma nova linha de comando) possui um ótimo recurso já mencionado.

Get-Content someFile.txt -wait

Mas você também pode filtrar na linha de comando usando uma expressão regular

Get-Content web.log -wait | where { $_ -match "ERROR" }

Eu uso "tail -f" no cygwin.

eu uso BareTail por fazer isso no Windows.É gratuito e possui alguns recursos interessantes, como guias para rastrear vários arquivos e realce configurável.

Ao usar Windows PowerShell você pode fazer o seguinte:

Get-Content someFile.txt -wait

FileSystemWatcher funciona muito bem, embora você precise ter um pouco de cuidado com o disparo de eventos duplicados - 1º link do Google - mas ter isso em mente pode produzir ótimos resultados.

Tail é a melhor resposta até agora.

Se você não usa Windows, provavelmente já possui o tail.

Se você usa o Windows, pode obter uma série de ferramentas de linha de comando Unix aqui: http://unxutils.sourceforge.net/ - Descompacte-os e coloque-os em algum lugar do seu PATH.

Em seguida, basta fazer isso no prompt de comando na mesma pasta em que seu arquivo de log está:

tail -n 50 -f tanto faz.log

Isso mostrará as últimas 50 linhas do arquivo e será atualizado conforme o arquivo for atualizado.

Você pode combinar grep com tail com ótimos resultados - algo assim:

Tail -n 50 -f O que quer que seja. Erro de Grep

fornece apenas linhas com "Error"

Boa sorte!

Resposta tardia, embora possa ser útil para alguém - LOGEXPERT parece ser um utilitário tail interessante para Windows.

Eu tenho usado FileSystemWatcher para monitoramento de arquivos de texto para um componente que construí recentemente.Pode haver opções melhores (nunca encontrei nada no meu limitado pesquisa), mas pareceu funcionar muito bem :)

Merda, que pena, você está realmente atrás de uma ferramenta para fazer tudo por você.

Bem, se você tiver azar e quiser fazer o seu próprio ;)

Experimente o SMSTrace da Microsoft (agora chamado CMTrace e disponível diretamente no menu Iniciar em algumas versões do Windows)

É uma ferramenta GUI brilhante que monitora atualizações em qualquer arquivo de texto em tempo real, mesmo se estiver bloqueado para gravação por outro arquivo.

Não se deixe enganar pela descrição, ele é capaz de monitorar qualquer arquivo, inclusive .txt, .log ou .csv.

Sua capacidade de monitorar arquivos bloqueados é extremamente útil, e é uma das razões pelas quais esse utilitário brilha.

Um dos recursos mais interessantes é a coloração das linhas.Se vir a palavra "ERROR", a linha fica vermelha.Se vir a palavra "WARN", a linha fica amarela.Isso torna os registros muito mais fáceis de seguir.

Cauda de cobra.É uma boa opção.http://snakenest.com/snaketail/

Você pode usar o FileSystemWatcher em System.Diagnostics.

Do MSDN:

Public class Watcher {

public static void Main()
{
Run();

}

[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
public static void Run()
{
    string[] args = System.Environment.GetCommandLineArgs();

    // If a directory is not specified, exit program.
    if(args.Length != 2)
    {
        // Display the proper way to call the program.
        Console.WriteLine("Usage: Watcher.exe (directory)");
        return;
    }

    // Create a new FileSystemWatcher and set its properties.
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = args[1];
    /* Watch for changes in LastAccess and LastWrite times, and 
       the renaming of files or directories. */
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
       | NotifyFilters.FileName | NotifyFilters.DirectoryName;
    // Only watch text files.
    watcher.Filter = "*.txt";

    // Add event handlers.
    watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.Created += new FileSystemEventHandler(OnChanged);
    watcher.Deleted += new FileSystemEventHandler(OnChanged);
    watcher.Renamed += new RenamedEventHandler(OnRenamed);

    // Begin watching.
    watcher.EnableRaisingEvents = true;

    // Wait for the user to quit the program.
    Console.WriteLine("Press \'q\' to quit the sample.");
    while(Console.Read()!='q');
}

// Define the event handlers.
private static void OnChanged(object source, FileSystemEventArgs e)
{
    // Specify what is done when a file is changed, created, or deleted.
   Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

private static void OnRenamed(object source, RenamedEventArgs e)
{
    // Specify what is done when a file is renamed.
    Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}

}

Você também pode seguir este link Observando a atividade da pasta em VB.NET

Apenas um plug-in descarado para responder, mas tenho um aplicativo gratuito baseado na web chamado Serra usado para visualizar arquivos log4net.Eu coloquei opções de atualização automática para que você possa obter atualizações quase em tempo real, sem ter que atualizar o navegador o tempo todo.

Sim, usei Tail para Win32 e tail no Cygwin.Achei ambos excelentes, embora eu prefira um pouco o Cygwin, pois sou capaz de rastrear arquivos pela Internet com eficiência e sem travamentos (o Tail for Win32 travou comigo em alguns casos).

Então, basicamente, eu usaria tail no Cygwin e redirecionaria a saída para um arquivo na minha máquina local.Eu teria então esse arquivo aberto no Vim e recarregado (:e) quando necessário.

+1 para BareTail.Na verdade eu uso BareTailPro, que fornece filtragem em tempo real na parte final com strings de pesquisa básicas ou strings de pesquisa usando regex.

Para completar a lista, aqui está um link para as portas GNU WIN32 de muitas ferramentas úteis (entre elas está tail).GNUWin32 CoreUtils

Surpreso que ninguém tenha mencionado Trace32 (ou Trace64).Esses são ótimos utilitários (gratuitos) da Microsoft que fornecem uma interface gráfica agradável e destacam quaisquer erros, etc.Ele também possui filtragem e parece exatamente o que você precisa.

Aqui está um utilitário que escrevi para fazer exatamente isso:

Ele usa um FileSystemWatcher para procurar alterações nos arquivos de log em pastas locais ou compartilhamentos de rede (não precisa ser montado, apenas forneça o caminho UNC) e anexa o novo conteúdo ao console.

no github: https://github.com/danbyrne84/multitail

http://www.danielbyrne.net/projects/multitail

Espero que isto ajude

ArquivoMon é uma ferramenta autônoma gratuita que pode detectar todos os tipos de acesso a arquivos.Você pode filtrar qualquer indesejado.No entanto, ele não mostra os dados que realmente mudaram.

Eu segundo "tail -f" no cygwin.Presumo que o Tail for Win32 realizará a mesma coisa.

Eu fiz um pequeno visualizador sozinho:

https://github.com/enexusde/Delphi/wiki/TinyLog

@echo off

set LoggingFile=C:\foo.txt
set lineNr=0

:while1
for /f "usebackq delims=" %%i in (`more +%lineNr% %LoggingFile%`) DO (
    echo %%i
    set /a lineNr+=1
    REM Have an appropriate stop condition here by checking i
)
goto :while1

Uma maneira de fazer isso no prompt de comando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top