[php] logfile parsen en bijhouden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gertjan
  • Registratie: Oktober 2001
  • Laatst online: 09-09 17:11

Gertjan

mmmm, beer...

Topicstarter
Ik heb het script dat de logfile van de printer parsed weer es uit het stof gehaald om deze beter te laten werken. Nu zit ik met het volgende.

formaat van logfile:
code:
1
2
3
4
5
Flatprinter2 Gertjan 1225 [29/Jul/2003:15:31:50 +0200] 1 1
Flatprinter2 Gertjan 1225 [29/Jul/2003:15:31:50 +0200] 2 1
Flatprinter2 JayVee 1226 [31/Jul/2003:15:55:08 +0200] 1 1
Flatprinter2 JayVee 1226 [31/Jul/2003:15:55:09 +0200] 2 1
Flatprinter2 JayVee 1226 [31/Jul/2003:15:55:09 +0200] 3 1


oude situatie:
script parsed de logfile, vergelijkt de datum van elke entry in de logfile met de laatste datum uit de database en beslist zo waar hij was gebleven en waar de nieuwe entries beginnen. Dit is natuurlijk zwaar inefficient omdat elke entry geparsed wordt. De logfile telt inmiddels ruim 2000 regels en dit duurt veel te lang.

De logfile staat op de printserver, en is niet beschrijfbaar voor apache/php. Informatie die ik gelezen en geparsed heb en in de database gezet heb wil ik het liefste uit de logfile verwijderen (en evt als backup in een andere file zetten). Maarja, de file is dus niet beschrijfbaar en ook niet beschrijfbaar te maken.

Weet iemand een manier om dit netjes op te lossen?

Waar ik zelf aan gedacht heb:
- Verwerkte informatie in een andere file zetten en bij een nieuwe update kijken naar de verschillen tussen deze files. Verschil = nieuwe entries.
Nadeel lijkt me hiervan dat ook dit niet erg efficient is.

- Logfile op oude manier blijven parsen, maar dan onderaan de logfile beginnen. Op deze manier hoef je alleen maar te kijken tot waar je moet en dus wel efficienter dan hoe ik het eerst deed. Nadeel: ik vind het geen mooie oplossing.

Acties:
  • 0 Henk 'm!

Verwijderd

Waarom houd je geen pointer bij (file offset) waar je gebleven was? Kun je in PHP niet gelijk naar een positie binnen een file springen?

Dan lees je je logfile in, stop je in je database alles vanaf file positie 1000, gehele file is 1500 lang, je slaat 1500 op, volgende keer begin je bij 1500.

Edit:

De functie die je zoekt is fseek

PHP:
1
2
3
4
5
6
7
8
  $pos = getLastLogPos();
  $fp = fopen("logfile","r");
  fseek($fp, $pos);

  // doe je stuff (fread, etc)

  saveLastLogPos(filesize("logfile"));
  fclose($fp);

[ Voor 29% gewijzigd door Verwijderd op 17-02-2004 19:14 . Reden: stukje script toegevoegd ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Nou zou ik $saveLastLogPos bepalen aan de hand van fTell dan kan je die namelijk ook opslaan en verder gaan als het process onderbroken word

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Het gebruiken van de filepointer zoal freewilly al zei is IMHO de mooiste oplossing.

Acties:
  • 0 Henk 'm!

  • Gertjan
  • Registratie: Oktober 2001
  • Laatst online: 09-09 17:11

Gertjan

mmmm, beer...

Topicstarter
stekkel schreef op 17 februari 2004 @ 20:02:
Het gebruiken van de filepointer zoal freewilly al zei is IMHO de mooiste oplossing.
Bedankt voor de toevoeging :P

Ik ben er ff mee bezig nu en dit lijkt idd mooi te werken. Tabelletje derbij in de dbase, 2 functies erbij, getLastLagPos en saveLogPos (met ftell()) en hij lijkt het goed te doen.

Thnx!

Acties:
  • 0 Henk 'm!

  • JayVee
  • Registratie: Mei 2002
  • Laatst online: 31-08 10:22

JayVee

shibby++!

Ali_Illegali schreef op 17 februari 2004 @ 18:28:
formaat van logfile:
code:
1
2
3
Flatprinter2 JayVee 1226 [31/Jul/2003:15:55:08 +0200] 1 1
Flatprinter2 JayVee 1226 [31/Jul/2003:15:55:09 +0200] 2 1
Flatprinter2 JayVee 1226 [31/Jul/2003:15:55:09 +0200] 3 1
offtopic:
Hey! Dat ben ik! >:)

ASCII stupid question, get a stupid ANSI!


Acties:
  • 0 Henk 'm!

Verwijderd

draai je het op een linux server?
er bestaat een programmatje logtail die houdt ook je index bij waar je gebleven bent etc.
Pagina: 1