2009-07-28 11 views
8

Ho un file di registro che registra continuamente brevi righe. Ho bisogno di sviluppare un servizio che reagisca (o sondaggi, o ascolti) a nuove linee aggiunte a quel file, una sorta di programma di coda di Unix, in modo che il mio servizio sia sempre aggiornato sul file.C#: coda come programma per il file di testo

Non penso che aprire un flusso di lettura e mantenerlo aperto sia una buona idea. Forse dovrei usare la classe FileSystemWatcher.

Per farla breve, ho bisogno di analizzare in tempo reale ogni nuova riga aggiunta a questo file.

Qualsiasi idea di aiuto o indicazione è molto apprezzata.

EDIT

Come sono stato non molto chiaro. Non ho bisogno di alcun programma, sono scrivendo un programma. Per leggere (quindi elaborare) ogni nuova riga aggiunta al file. Intendo dire che quello che sto cercando è una metodologia (o: come implementarla?) Per un continuo tailing un file che continua a essere scritto.

Devo sviluppare un servizio Windows che "ascolta" questo file e fa operazioni su ogni nuova riga.

Quindi, se in un dato momento in cui il file è:

12.31.07 - jdoe [log on] 347 
12.32.08 - ssmith [log on] 479 
12.32.08 - mpeterson [log off] 532 
12.32.09 - apacino [log on] 123 

nel momento stesso in cui la linea di

12.32.11 - pchorr [log on] 127 

viene aggiunto nel file di registro dal programma di registrazione (che ho non ho accesso a), ho bisogno del mio servizio Windows per "reagire" alla dipendenza dalla linea, intercettare la nuova linea (12.32.11 - pchorr [log on] 127) ed elaborarla. E così via.

Ora, non so come farlo. Dovrei eseguire il polling del file ogni n secondi, memorizzare l'ultima riga di lettura in memoria ed elaborare solo le righe appena aggiunte. Il problema con questo è che è molto lento, inoltre dovrei leggere un file molto grande ogni volta.

O forse potrei usare FileSystemWatcher, ma non ho trovato alcun esempio di utilizzo per scopi simili.

Quindi, cosa suggeriresti di portare a termine il lavoro? Grazie.

+1

Perché non si può usare la coda? – Alan

+3

Penso che voglia fare una sorta di elaborazione sulle linee che vengono aggiunte al file di log non semplicemente visualizzarle come fa tail e vorrebbe sapere il modo migliore per monitorare il log e leggere le righe. – drs9222

risposta

9

Si consiglia di utilizzare FileSystemWatcher per ricevere notifiche sulle modifiche al file o ai file di cui si è interessati. Da lì, memorizzo nella cache informazioni come la dimensione del file tra gli eventi e aggiungo un po 'di logica per rispondere solo alle linee complete, ecc. È possibile utilizzare il metodo della classe FileStream per passare a un punto particolare del file e leggere solo da lì. Date queste caratteristiche, non dovrebbe essere troppo difficile eseguire manualmente questa funzionalità se è quello che ti serve.

0

Non hai davvero spiegato se hai bisogno di un programma simile a quello di Windows, ad esempio http://www.baremetalsoft.com/baretail/ o se vuoi una versione di Windows di coda (usa cygwin) o se stai cercando una sorta di API di monitoraggio dei log. ..

7

Soluzione semplice, utilizzare il codice di esempio fornito nell'articolo http://www.codeproject.com/Articles/7568/Tail-NET. È solo una funzione copia/incolla nel tuo codice.

+0

Se si sta eseguendo il polling, questo è il più semplice. Se non si esegue il polling, FileSystemWatcher sarebbe migliore. –

1

È importante notare che Microsoft (dal momento che vista/svr08) non aggiorna più i metadati del file quando un file viene aggiornato (come un file di registro che viene aggiornato da un servizio).

Per esempio, i metadati di un file come data di modifica, non verrà aggiornato fino a quando il file è chiuso dal servizio/programma che è l'aggiornamento del file di registro.

Pertanto, FileSystemWatcher NON rileva gli aggiornamenti del file di registro come previsto.

https://blogs.technet.microsoft.com/asiasupp/2010/12/14/file-date-modified-property-are-not-updating-while-modifying-a-file-without-closing-it/

Problemi correlati