Größe einer Logdatei begrenzen

Status
Nicht offen für weitere Antworten.

cowabunga1984

Aktives Mitglied
Hallo,

ich möchte die Größe meiner Logfiles (normale Textdateien) auf eine bestimmte Größe begrenzen, z.B. 4mb. Immer wenn etwas an das Ende des Logfiles geschrieben wird, soll etwas vom Anfang gelöscht werden. Bisher habe ich weder in Google, noch im Forum etwas zu dem Thema gefunden (wahrscheinlich weil ich nicht genau weis, nach was ich suchen muss).

Mein Java-Tool öffnet Logfiles mit folgedem Befehl:
Code:
FileOutputStream outstreamLogFile = new FileOutputStream(this.strLogFile, true);
String logMessage = message + "\n";
outstreamLogFile.write(logMessage.getBytes());
outstreamLogFile.close();

Danke schonmal für Tips ;)

Gruß
cowabunga1984
 

SnooP

Top Contributor
nunja ... was liefert denn die Methode getBytes()? Genau den String kodiert als Byte-Array... jedes Element des Arrays ist also genau ein Byte. Die Länge des Arrays bekommst du mit array.length. Genau das ist die Anzahl Bytes des Strings... - d.h. wenn du vorher 4mb angibst, sind das 4*1024*1024 Byte... und du musst dann per if prüfen ob die länge von getBytes größer oder kleiner ist, als deine angegebene Obergrenze.
 

cowabunga1984

Aktives Mitglied
Hi,

das würde dann heissen, dass ich
1. meine Message in die Datei schreibe
2. Überprüfe wie groß die gesamte Datei ist
3. Wenn die Datei zu Groß ist, ein bisschen davon abschneiden

zu 3.
Dateigröße ermitteln durch File.length()
Returns: The length, in bytes, of the file denoted by this abstract pathname, or 0L if the file does not exist

Wenn die Datei zu groß ist:
Datei öffnen mit: FileInputStream
Gesamten Inhalt zwischenspeichern:
Ich habe es mal versucht, bekomme allerdings immer eine Fehlermeldung: java.lang.IndexOutOfBoundsException
Code:
int intLength = inLogFile.read(buffer, 500, (int) longFileLength);
Die 500 habe ich mal probiert, um die ersten 500 Byte nicht mit zwischen zu speichern. Allerdings scheine ich unter Offset etwas falsches zu verstehen. Deshalb meine Frage: Wie kann ich den gesamten Inhalt der Textdatei zwischenspeichern (außer die ersten 500kb)?.

Gruß
cowabunga
 

Leroy42

Top Contributor
Wenn ich dein Anliegen richtig verstehe, willst du eine Art Ringpuffer
als Datei realisieren. ???:L

Die heutigen Dateisysteme bieten sowas nicht automatisch an; wenn
ich nix durcheinanderbringe, gab es sowas mal beim alten IBM
Betriebssystemen (ich glaube VMS/CMS oder so ähnlich :shock: ),
das allerdings nur die Bedienung kapselte und sonst auch nur mit
Wasser kochte.

Ich sehe 3 Möglichkeiten.

1. Du benutzt eine Datenbank, in der du nicht mehr benötigte Datensätze
löschst und damit der DB die Verwaltungsarbeit aufhalst: Etwas overdosed.

2. Du definierst dir eine feste Länge einer Logzeile.
Dadurch brauchst du am Anfang deiner Datei nur einen
Lese- und Schreibindex zu speichern und kannst gezielt
zur absoluten Dateipositioin springen.

3. Du definierst dir eine total eigene Datenstruktur:

1. Indexdatei mit Einträgen

Nummer : ByteAnfang : ByteEnde(länge)

2. Datendatei

Was allerdings sehr aufwendig würde.
 

Leroy42

Top Contributor
Hier (ungetestet)

Code:
public void 500KBWeg(String woDenn) throws IOException {
	byte[] buf = new byte[1024];
	int lim = 500*1024;
	int von = lim+1;
	int to = 0;
	int gelesen;
	
	RandomAccessFile rf = new RandomAccessFile(woDenn);
	rf.seek(von);
	while ((gelesen = rf.read(buf)) > 0) {
		rf.seek(to);
		rf.write(buf, 0, gelesen);
		to += gelesen;
		rf.seek(von += gelesen);
	}
	rf.close();
}
 

Oskar

Aktives Mitglied
Wenn es dir nur drumgeht die Größe einer Log Datei zu begrenzen nutz doch einfach FileHandler aus dem Sun Logging. da gibt es einen Konstruktur mit dem du bestimmtst wie groß die Datei werde darf, und aus wievielen Dateien der Logfile Zyklus besteht.

Wenn ein File zu groß ist wird das nächste von Vorne geschrieben. Wenn er wieder beim ersten ankommt fängt er (glaube ich) an die Datei vom Anfang her zu überschreiben.

cheers
 

cowabunga1984

Aktives Mitglied
Hi,

habe das schon ausprobiert. Funktioniert auch super, blos leider kann ich XML in den Logfiles nicht brauchen. Kann man die Ausgabe bei dem FileHandler irgend wie formatieren? Habe nichts dazu gefunden.

Gruß
cowabunga
 

Oskar

Aktives Mitglied
Du kannst dem Filehandler sagen welche art von LOG er produzieren soll. Es gitb soweit ich weiss standardmäßig XML oder standard log. Es gibt hierzu den Formatter und seine Implementierungen XMLFormatter und SimpleFormatter.

Für eine einfache Ausgabe sollte frolgendes aussreichen
Code:
java.util.logging.Handler fileLog = new java.util.logging.FileHandler("my.log",2,2); //für loggzyklus mit 2 dateien
java.util.logging.Formatter format = new java.util.logging.SimpleFormatter();
fileLog.setFormatter(format)

cheers

[edit]
ein gutes Tutorial zum Logging findest du unter Logging API
 

cowabunga1984

Aktives Mitglied
Hi,

habs jetzt mit dem Java Logger gelöst:
Code:
try
{
    // strLogFile ist der Pfad zu Logdatei
    this.myLogger = Logger.getLogger(strLogFile);
    // intMaxLogfileSize wird vorher auf z.B. 4mb definiert
    FileHandler myFileHandler = new FileHandler(strLogFile, this.intMaxLogfileSize, 1);
    Formatter myFormat = new SimpleFormatter();
    myFileHandler.setFormatter(myFormat);
    this.myLogger.addHandler(myFileHandler);
}
catch (SecurityException e)
{
    System.out.println("ERROR - Couldn't open Logfile!");
}
catch (IOException e)
{
    System.out.println("ERROR - Couldn't edit Logfile!");
}

wenn jetzt was geloggt werden soll muss ich nur noch schreiben:
Code:
this.myLogger.log(Level.INFO, message);

Das alles ist jetzt halt bei mir in einer eigenen Klasse "MyLogger". Die braucht man eigentlich nicht, aber ich hatte sie schon vorher und wollte nicht meine restlichen Klassen abändern.

Meine Logfiles sehen jetzt so aus:
Code:
30.05.2006 09:14:14 de.emediaoffice.diwan.MyLogger write
INFO: Filesystemwatcher initialized on: D:\Watch_Folder

Danke nochmal für die Hilfe :D

Gruß
cowabunga

PS: Weis jemand zufällig wie ich die vielen Logdateien (.lck usw.) in einen selbst definierten Ordner auslagern kann?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
1 Größe einer zirkulären Liste bestimmen .. ? Java Basics - Anfänger-Themen 2
M Größe einer Datei via. Link ermitteln Java Basics - Anfänger-Themen 9
M Größe einer Konsole ermitteln Java Basics - Anfänger-Themen 2
C Größe einer Referenz ? Java Basics - Anfänger-Themen 16
S Größe einer Combobox Java Basics - Anfänger-Themen 5
B Größe einer JList beeinflussen Java Basics - Anfänger-Themen 2
C Größe einer MainForm ermitteln. Java Basics - Anfänger-Themen 7
S Größe einer Datei, JFileChooser Java Basics - Anfänger-Themen 5
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
M Seltsame Bytecode-Größe Java Basics - Anfänger-Themen 22
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
J JScrollePane größe anpassen Java Basics - Anfänger-Themen 4
G Bubblesort Array der Größe 10 Java Basics - Anfänger-Themen 1
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
T JLabel hat falsche größe Java Basics - Anfänger-Themen 1
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
D JPanel passt die Größe nicht an Java Basics - Anfänger-Themen 22
E Array-Größe anpassen Java Basics - Anfänger-Themen 1
Z ArrayList direkt feste Größe mitgeben Java Basics - Anfänger-Themen 13
R Verschachtelte Arraylist und deren Größe auslesen Java Basics - Anfänger-Themen 7
D Größe der Zahlenkombinationen eines Arrays begrenzen Java Basics - Anfänger-Themen 0
V Die die aktuelle Größe zusätzlich in einem Label angezeigt wird Java Basics - Anfänger-Themen 11
J Liste der Größe nach sortieren Java Basics - Anfänger-Themen 2
P Größe der BufferStrategy in der Window-Klasse Java Basics - Anfänger-Themen 5
S String nach Größe sortieren Java Basics - Anfänger-Themen 6
O Größe von Objekten Java Basics - Anfänger-Themen 5
H Erste Schritte Größe eines 2 dimensionalen Arrays ausgeben Java Basics - Anfänger-Themen 6
M Feste Größe des JFrames - Problem mit Dimension Java Basics - Anfänger-Themen 6
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
S JSlider Schritt Größe Java Basics - Anfänger-Themen 5
D Ausgabefenster größe festlegen Java Basics - Anfänger-Themen 3
P JTabel größe ändern und button anzeigen Java Basics - Anfänger-Themen 5
M Größe eines Buttons festlegen Java Basics - Anfänger-Themen 4
L JLabel Icon Größe anpassen Java Basics - Anfänger-Themen 11
S Datentypen und ihre Größe Java Basics - Anfänger-Themen 21
P JFrame Component automatische Größe verhindern Java Basics - Anfänger-Themen 2
L 3 Zahlen einlesen und nach der Größe Sortieren Java Basics - Anfänger-Themen 5
A Bildgröße automatisch auf JLabel Größe konvertieren Java Basics - Anfänger-Themen 9
W Methoden größe zweier tiere vergleichen Java Basics - Anfänger-Themen 15
B JTabbedPane größe der Tabs ändern Java Basics - Anfänger-Themen 6
T Erste Schritte Textfeld übernimmt Größe nicht Java Basics - Anfänger-Themen 11
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
A Größe von Bild festlegen Java Basics - Anfänger-Themen 3
E Buchstaben nach Größe vergleichen Java Basics - Anfänger-Themen 4
M OOP Methode überschreiben mit String-Paramter unterschiedlicher Größe? Java Basics - Anfänger-Themen 19
RySa Input/Output aktuelle größe des BufferedWriters ? Java Basics - Anfänger-Themen 5
T ArrayIndexOutOfBoundsException - Problem mit Array-Größe Java Basics - Anfänger-Themen 4
L Größe von Ordner wiedergeben Java Basics - Anfänger-Themen 4
J Array Größe über Kommandozeile eingeben Java Basics - Anfänger-Themen 3
K GUI - Größe nicht änderbar Java Basics - Anfänger-Themen 7
B Tabelle, Größe der Komponenten Java Basics - Anfänger-Themen 2
Luk10 Größe von Objekten Java Basics - Anfänger-Themen 4
A Datentypen Größe eines mehrdimensionales Arrays Java Basics - Anfänger-Themen 4
E Titel und Größe vom JFrame setzen Java Basics - Anfänger-Themen 6
A Bild ändert Größe des Gridbag Layouts Java Basics - Anfänger-Themen 4
D Zylinder/Eigenschaften (auf Größe) vergleichen Java Basics - Anfänger-Themen 16
c_sidi90 Größe von Dateien aus File Array ermitteln Java Basics - Anfänger-Themen 12
N zweidimensionales array größe bestimmen Java Basics - Anfänger-Themen 1
I Schriftart / farbe / größe bei Emailversand ändern Java Basics - Anfänger-Themen 17
K Problem mit Applet Größe Java Basics - Anfänger-Themen 5
Luk10 Größe eines Arrays ausgeben Java Basics - Anfänger-Themen 4
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
T Wie kann ich einem Graph in nem JPanel eine fixe Größe geben? Java Basics - Anfänger-Themen 6
MisterSeven Java Swing - Wie Frame größe festlegen?! Java Basics - Anfänger-Themen 10
M größe JEditorPane Java Basics - Anfänger-Themen 5
radiac Von einem Bild die Größe rausfinden??? Java Basics - Anfänger-Themen 9
J 2Dimensionales Array, Größe durch Eingabe bestimmen Java Basics - Anfänger-Themen 9
S Eclipse Java Applet größe ändern aber wie? Java Basics - Anfänger-Themen 5
M array - größe Java Basics - Anfänger-Themen 8
Z TextArea Größe festlegen Java Basics - Anfänger-Themen 22
K Größe, mehrdimensionales Array Java Basics - Anfänger-Themen 6
B ComboBox Größe ändern Java Basics - Anfänger-Themen 4
P Größe eines JButton? Java Basics - Anfänger-Themen 17
C die Klasse File - die größe der Datei anzeigen Java Basics - Anfänger-Themen 12
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
-horn- Array mit nicht fixer Größe möglich? Nachträgliches befüllen Java Basics - Anfänger-Themen 10
G JButton LookAndFeel - Größe ändern Java Basics - Anfänger-Themen 2
D File(jpeg) größe ändern und dann zu einen byte[] Java Basics - Anfänger-Themen 7
F InternalFrame, Anpassung der Größe Java Basics - Anfänger-Themen 10
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
K globales array - größe im Konstruktor Java Basics - Anfänger-Themen 3
N Integer Array der Größe nach ordnen Java Basics - Anfänger-Themen 1
I Swing-Komponenten-Größe im GridBagLayout beschränken Java Basics - Anfänger-Themen 2
G Button Größe anpassen Java Basics - Anfänger-Themen 4
R textfeld größe definieren Java Basics - Anfänger-Themen 2
B Java Array List größe auslesen zur Suchfunktion Java Basics - Anfänger-Themen 5
K Strings der Größe nach ordnen Java Basics - Anfänger-Themen 5
S Auf JButtonBar komponenten ausrichten, größe festlegen? Java Basics - Anfänger-Themen 5
M größe für Applet definieren Java Basics - Anfänger-Themen 4
G JList größe verändert sich Java Basics - Anfänger-Themen 2
G max größe array Java Basics - Anfänger-Themen 10
G Größe von JFrame unveränderbar Java Basics - Anfänger-Themen 7
G Maximale Größe von klasse Java Basics - Anfänger-Themen 7
G Größe von Box festlegen Java Basics - Anfänger-Themen 7
G die Größe eines Button bestimmen ? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben