Sto lavorando su un'applicazione che legge un file di registro, cerca una stringa specifica, invia e-mail di avviso e salva i dati dal file in un database. La funzionalità di lettura sta funzionando bene, ma mi sto imbattendo in un problema quando mi fermo e riavvio il mio programma. Fondamentalmente, inizia sempre dall'inizio del file di log, quindi sto rileggendo le informazioni che ho già letto. Si prega di fare riferimento all'esempio qui sotto.
Considera che ho il file di registro con le seguenti righe
1 0708 1200 Error in log
2 0708 1230 Received invoice 00001
3 0708 1231 Received invoice 00002
4 0708 0130 Error in log
5 0708 0135 Received invoice 00003
6 0708 0200 Received invoice 00004
7 0708 0230 Received invoice 00005
8 0708 0235 Error in log
In questo esempio, diciamo che ho eseguito l'applicazione. L'applicazione inizierà a leggere alla riga 1 e continuerà fino a quando non interromperò l'applicazione (prendendo le eventuali righe aggiunte al file). Diciamo che interrompo l'applicazione quando arrivo alla linea 5. Se fosse così, avrei ricevuto un'e-mail di avviso dalla riga 1 e dalla riga 4. Avrei anche salvato le righe 2 e 3 nel database.
Il mio problema / domanda proviene da quando voglio riavviare nuovamente l'applicazione. Attualmente, l'applicazione inizierà nuovamente a leggere alla riga 1. Questo non è un problema quando si tratta di salvare dati perché ho inserito una clausola per non salvare se la linea è già stata aggiunta. Tuttavia, quando si tratta di inviare e-mail, riceverò nuovamente un'e-mail per le righe 1 e 4.
Dopo tutto quel vagabondaggio, presenterò la mia domanda / domanda reale. C'è un modo per fermare un programma (interrompe completamente il processo) e iniziare a leggere dal punto in cui ho smesso di leggere? Non riesco a pensare a un modo per salvare il segnaposto per il file e usarlo una volta che riavvio il programma.
Ho preso in considerazione il salvataggio del valore del puntatore del file in un file di testo e la lettura da lì ad ogni avvio, ma mi chiedevo se c'era un altro modo o qualche suggerimento per migliorare questo processo. So che questa domanda è astratta, ma sto cercando di dare più cervello a questo problema.
Piccole informazioni:
- Questo è un programma java
- Questa è un'app Web in esecuzione su un server tomcat
- Il server su cui è in esecuzione Tomcat è un server unix
- Questa è un'applicazione in esecuzione costante che dovrebbe essere spenta solo durante un problema o una modifica
- I log sottoposti a scansione sono molto grandi con oltre 500.000 righe
- I registri si girano (vengono sostituiti con un log vuoto) una volta raggiunta una certa dimensione. Ciò significa che quando salgo il puntatore del file, devo assicurarmi di essere nello stesso file prima di iniziare a leggere di nuovo, altrimenti voglio ricominciare dall'inizio
Qualsiasi aiuto / suggerimento sarebbe molto utile. Ci scusiamo per la domanda prolissa, per favore fatemi sapere se qualcosa non è chiaro. Grazie!