03. september 2003 - 11:50Der er
5 kommentarer og 1 løsning
Problem med PrintWriter og løbende gemme data i fil
Hejsa eksperter
Jeg har her i de sidste par dage arbejdet på at kode en irc bot, hvor en af bottens vigtige funktioner er at logge alt den trafik der foregår i en kanal. pt gør det det ved at åbne en printwriter for hver fil jeg ønsker at skrive til (en fil per kannal) som vist herunder:
pw = new PrintWriter(new BufferedWriter(new FileWriter(f, true)), true);
hvor f er et File objekt, jeg skriver til writeren med denne metode:
private void writeRawString(PrintWriter pw, String s){ try{ pw.write(s + (char)13 + (char)10); }catch (Exception e){ System.out.println("Exception caught during attempt to print to log file. Printing stack trace"); e.printStackTrace(); }
Mit problem er at dataen tilsyneladende først "dukker op" i filen efter at programmet er lukket, og kun når det er lukket korrekt ned. Problemet ligger sikkert i den måde os'et (win2k) håndterer åbne filer, men jeg kan ikke lige komme på nogen god ide til hvordan jeg skal kode mig omkring det. At åbne/lukke en writer/stream for hver besked vil virke noget dumt.
Jeg vil lige prøve at indsætte en flush() og lade den køre noget tid, men jeg tror ikke det er løsningen da der i går blev logget så meget til en af chansne at den burde havde flushet adskillige gange.
Håber I har en god ide til hvordan en løsning kan udformes.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Okay, er der nogen muligheder for at åbne filen på en sådan måde at andre programmer kan få adgang til dataen løbende? Jeg skal kunne hive logsne ud til bearbejdning engang imellem og det duer ikke at stoppe botten for det. Jeg kan selvf lukke/åbne streams like før jeg fetcher loggen men er en noget grim løsning.
1) Hvert X. minut lukker du filen og åbner en ny fil med et andet navn (fil00001.log, fil00002.log ... eller lignende). Så kan de gamle filer processes.
2) Du erstatter den flade fil med en databasen tabel (f.eks. MySQL).
Jeg kommer nok til at bruge løsning 1 med at lukke, så copiere filen til et filnavn-process og genåbne. Logsne parses af et program jeg ikke har sourcen til så skal havde bestemt navn, format osv.
Takker for hjælpen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.