Domanda

ho implementato un file di log che verrà memorizzando la CPU e la memoria a stato di un processo dopo ogni minute.I hanno limitato la dimensione massima del file da 3MB (questo è abbastanza per il mio scopo).

Lo script verrà chiamato da un job cron ogni minuto e lo script registrerà i dettagli per quel minuto e rinomina il file come "Log_.log" .

Quando si raggiunge la dimensione "3MB - 100 byte" reimposta il puntatore del file punto all'inizio e sovrascrivono la prima voce nel file di registro e ora rinominare il file come "Log_ <0 + qualche compensato > log ".

Mentre sto rinominare il file dopo ogni minuto per aggiornare la posizione del puntatore del file, è una buona / modo efficiente?

Non voglio mantenere più di un file di log per questo scopo.

Un'altra opzione per me è quello di mantenere la posizione del puntatore file in un file, ma .... un altro file !! Non sono interessato a mantenere uno se questa opzione è buono:)

Grazie in anticipo.

È stato utile?

Soluzione

Sei un ingegnere? Questo è un buon esempio di qualche operazione semplice, risolto da un eccessivamente complessa soluzione perfettamente funzionante ma.

A meno che il contenuto si mette in porta esattamente tanti byte come il contenuto di stipulare, scrivendo "in" un file sarà effettivamente causare la seguente parte intera dopo la vostra posizione di scrittura da riscrivere su disco. Append è molto più conveniente .

Rinominare il file per memorizzare i lavori puntatore - ma di non molto elegante e fa cose più complesse (per esempio, le vostre esigenze di processo di scrittura diritti per la directory in cui risiede il file - altro solo l'accesso in scrittura a due file è sufficiente)

A meno che lo spazio su disco è un problema (e in realtà, raramente è), il tuo approccio è meno efficiente rispetto ad esempio, append tutto in un file, e ruotare il file quando si raggiunge la dimensione massima . In questo modo si ha sempre l'ultima 3MB di log disponibili, e la massima 3MB di più nel file corrente. Si farà l'analisi del file molto più facile troppo, invece di ricalcolare l'intera cosa posizione del puntatore.

Aggiornamento per rispondere alla tua commento:

Rinominare un file ogni minuto (o anche ogni secondo) non dovrebbe rallentare il sistema in modo significativo, non ti preoccupare di questo.

Le nostre preoccupazioni sono principalmente "perché pensi di aver bisogno di rinominare il file". Non è meglio tecnicamente, non è meglio da un punto di vista logico, fa un sacco di altri (futuri) compiti più difficili. È possibile memorizzare il puntatore del file in un file separato, o alla fine del file, e ci sono migliori ^ H ^ H ^ H ^ H ^ H ^ H soluzioni più semplici che non richiedono il puntatore del file a tutti.

Altri suggerimenti

Sono confuso perché si rinominare il file. Che cosa significa questo realizzare?

sono le voci di registro fissa dimensioni? O dimensioni variabili?

Se le voci sono fisse dimensioni, quindi non v'è alcuna difficoltà a ri-scrittura del file esistente fin dall'inizio: non si potrà mai avere le voci incomplete nel file, e se si sta scrivendo un contatore o timestamp al file , dovrebbe essere chiaro la posizione 'cursore'.

Se le voci sono di dimensioni variabili, allora si dovrebbe probabilmente non inizia ri-scrittura del file dall'inizio, senza in qualche modo mettendo in chiaro dove il 'puntatore' si trova nel file, e scrivere il codice che è resistente alla lettura troncato registro voci.

Si può riutilizzare esistente strumenti come RRDtool ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top