log4j als separate Dateien in Schleife?

M

MiMa

Top Contributor
Beim starten meines Programms protokolliert log4j alles in die Datei, bis das Programm abgebrochen oder beendet wurde.
Mein Programm läuft mittlerweile mit allen zu untersuchende Dateien bis zum Ende ohne Programmabbruch durch (> 58.300 Dateien, 129 min).

Die Logdatei hat eine Größe von 657 MB und kann weder mit dem Editor, Notepad+ als auch Word geöffnet werden.
Die Anzeige mit dem Google Crome Browser funktioniert, aber wirklich hilfreich ist die Logdatei in dieser weise nicht wirklich.
Daher wollte ich mal nachfragen, ob man Logdateien Stückeln kann?

1. Mein Programm startet und lädt alle Dateien in eine Liste
2. Holt die erste Datei aus der Liste und verarbeitet diese
3. Holt die nächste Datei aus der Liste und verarbeitet diese
4. Holt die nächste Datei aus der Liste und verarbeitet diese

Wäre es möglich nachdem die erste Datei verarbeitet wurde dieses Logfile mit einen eigenen Namen zu speichern und dann mit der nächsten Datei weiter zu machen?
Es wäre auch viel sinnvoller eine Datei mit einer eigenen Protkolldatei zu haben, denn aus einer riesigen Protokolldatei für eine Datei etwas heraus zu suchen ist nichts womit man arbeiten möchte.

Danke
Mi
 
kneitzel

kneitzel

Top Contributor
Also bezüglich Logging: Es gibt RollingAdapter, die bei einer bestimmten Größe eine neue Datei erstellen. Und da kann man dann auch eine gewisse Menge an Dateien erzeugen / vorhalten lassen. Das ist das, was bei uns ausreicht.

Um dann die richtige Logdatei zu finden (a.la. wo finde ich das Log von der Verarbeitung der Datei xyz?) reicht uns dann ein einfaches grep um den Start zu finden. (Wobei es das wohl auch als Tools gibt mit Suche und so ... Aber da kenne ich mich nicht aus... Ich hatte nur einmal eine Demonstration gesehen von einer Arbeitsgruppe. Da sind alle Logs in eine zentrale Datenbank geflossen. Elasticsearch ist da wohl ein Schlüsselwort - das kann aber ggf. jemand anderes besser was zu sagen... @httpdigest vielleicht? Er bringt immer sehr gute, fundierte Beiträge aus seiner Erfahrung. ... ich hätte da so auf Anhieb nur einen Link zur Hand: https://www.elastic.co/de/log-monitoring - das wollte ich mir halt auch schon lange mal ansehen :) )

Das aber nur, um einmal Alternativen aufzuzeigen, denn ich halte es immer für unnötig, in log4j Konfigurationen im Code vorzunehmen. Das geht eigentlich immer alles schön über die separate Konfiguration und ich sehe halt das Risiko, dass externe Konfiguration und interne (unerwartete) Spielchen sich ins Gehege kommen ...

Ansonsten kannst Du im Code die Appenders verändern:
Beispiel für Hinzufügen von Appendern:
Beispiel für Entfernen / bekommen von Appendern:

Aber wie gesagt: Die Log-Konfiguration ist etwas, das aus meiner Sicht in Admin / Kundenhand ist. Als Entwickler bietet man nur die Option an und der Kunde kann sich überlegen, was er nun möchte. Aber das kann natürlich jeder so sehen, wie er möchte und natürlich möchte ich nicht ausschließen, dass es Konstellationen gibt, bei denen die "üblichen Vorgehensweisen" nicht reichen oder nicht funktionieren.
 
H

httpdigest

Top Contributor
Meine Erfahrung mit Elasticsearch ist leider noch null. :) Alle Kundenprojekte, die ich in letzter Zeit mitgemacht hatte, hatten ein Clouddeployment (meist AWS, einmal Azure und jetzt hab ich ein Google Cloud Projekt am Wickel). Dort ist Log Rotation bzw. Logfile-Handling dann ein Aspekt, um den man sich in seiner Anwendung glücklicherweise nicht mehr zu kümmern braucht, schreibt also einfach nur noch alles nach stdout/stderr und nutzt die Logging Tools der Clouddienstleister wie halt AWS CloudWatch Logs oder Google Logs Explorer mit sehr mächtigen Suchfunktionen, die Volltext in Plaintext-Lognachrichten oder JSON-Felder indexieren können. Das kann natürlich Elasticsearch auch alles, nur hab ichs leider noch nie eingesetzt.
Wie @kneitzel aber schon sagte, brauchst du erstmal Log File Rotation, was du in der log4j Config einfach realisieren kannst.
 
M

MiMa

Top Contributor
Aus einen vorherigen Post den ich mit euch schon mal diskutiert hatte war ebenfalls Logdateien mit verschiedenen Dateinamen an verschiedenen Orten zu speichern. Das hatte ich damals mit log4j nicht hinbekommen und hatte eine eigene Klasse dafür geschrieben um dies zu tun.
logDateienBuch.JPG
Nachdem ich das fertig implementiert hatte und mir den Code nachher angeschaut habe, wurde mir klar, das es nicht wirklich eine gute Lösung war.
Auch gab es hier und da mit dem Logging Probleme und daher bin ich immer noch auf der suche nach einer besseren Lösung.
Das Logging ab einer bestimmten größe ab zu brechen ist für mich keine Lösung, da ich gerne für jede Datei ein eigenes Logile hätte.
Cloudlösungen möchte ich nicht verwenden und elastic Search kommt auch erst mal nicht in Frage, da ich mich nicht mit noch etwas beschäftigen möchte.

Ich suche nach einer Lösung die so aussehen sollte.
1610533315909.png
 
Zuletzt bearbeitet:
L

LimDul

Top Contributor
Meist ist es keine gute Idee Logging selber zu implementieren :)

Eigentlich sollte alles mit Log4j gehen, man muss es nur richtig nutzen. Man muss nur verstehen, wie log4j funktioniert. Im Groben funktioniert es so:

* Schreibe in einen benannten Logger eine Log-Message mit einem Log-Level.
* Log4j schaut dann in der Konfiguration nach, in welcher Appender diese Message geschrieben. Dazu nutzt es sowohl den Logger-Namen als auch das Level.
* Der Appender wiederum entscheidet dann, wie diese Nachrichtig verarbeitet wird (Konsolen-Ausgabe, Datei etc.)

Du müsstest jetzt mal deine Anforderungen auf diese Sachen mappen. Das "fange eine neue Datei nach Kriterium x, wobei x nicht fachlich ist" ist eine klassische Anforderung die in die Appender reingehört und wie schon geschrieben, mit dem RollingFileAppender gelöst ist. Das ist bei vielen Logs aus Anwendungen auch Standard. So hab ich im JBoss eine server.log, eine server.log.1 eine server.log.2 usw.. Das ist rein über die Konfiguration zu lösen und da sollte in der Anwendung nichts für gemacht werden. Das nutzt man klassisch entweder zeitgesteuert (jeden Tag) oder Größen gesteuert (nach X Zeilen / nach Y MB) eine neue Datei anzufangen.

Willst du dagegen fachlich entscheiden in unterschiedliche Dateien zu loggen (So gibt es z.B. bei JBoss einer server.log, ein audit.log, etc), dann nutzt man in der Regel dazu Logger mit verschiedenen Namen. Normalerweise nimmt man als Namen des Loggers immer den Klassennamen (damit bekommt man auch für die Konfiguration direkt eine Hierarchie mit), aber das ist kein muss. Man kann durchaus noch weitere Suffixe dranhängen. Das klappt aber nur, solange vorher klar ist, wie viele verschiedene Dateien es gibt. Wenn dein Programm Dateien verarbeitet und du willst für jede Datei eine Log-Datei haben, dann reicht die reine Konfiguration nicht mehr aus. Da sehe ich zwei Möglichkeiten:

* Du erzeugt einen FileAppender im Programm für jede zu loggende Datei und hängst ihn programmatisch in die Konfiguration rein
* Du schreibst einen eigenen Appender, der aus dem Logger-Namen den Dateinnamen raus-extrahiert wohin er loggen oll.

Vermutlich ist die erste Variante die sauberste.
 
M

MiMa

Top Contributor
Du schreibst einen eigenen Appender, der aus dem Logger-Namen den Dateinnamen raus-extrahiert wohin er loggen oll.
vielen Dank,
ich denke einen eigenen Appender zu schreiben wäre die beste Lösung.
Wie viele Dateien es sind kann ich im voraus nicht sagen, aber die Datei aus dem Dateinamen wird bereits extrahiert und ist somit verwendbar.
Ich werde dann jetzt mal tiefer in log4j einsteigen und versuche mal das Problem aus diese weise zu lösen.
Danke
Mi
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
B Log4J Pfad des Logfiles definieren Java Basics - Anfänger-Themen 6
Tom299 Log4j in jeder Klasse definieren? Java Basics - Anfänger-Themen 12
O Wie Log4J - Ausgaben/Events auffangen?! Java Basics - Anfänger-Themen 3
S log4j in externer Library Java Basics - Anfänger-Themen 4
M xml log4j überschreiben für/in Java Klassen Java Basics - Anfänger-Themen 4
N wie *.class-Dateien mit log4j loggen? Java Basics - Anfänger-Themen 9
F Log4j - log4j:WARN No appenders could be found for logger Java Basics - Anfänger-Themen 1
0 Log4J Probleme beim einlesen der Log datei Java Basics - Anfänger-Themen 2
0 Log4J Instanz erzeugen Java Basics - Anfänger-Themen 2
M Input/Output log4j mit properties datei Java Basics - Anfänger-Themen 6
T LOG4J Konfiguration Java Basics - Anfänger-Themen 5
W log4j "installieren" Java Basics - Anfänger-Themen 10
F ThreadId in Log4j Java Basics - Anfänger-Themen 4
M log4j Java Basics - Anfänger-Themen 11
H Log4J und Angabe eines Ordners Java Basics - Anfänger-Themen 5
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
A log4j - Warum wird Methode getHeader 2x ausgeführt? Java Basics - Anfänger-Themen 2
S log4j pfad per umgebungsvariable setzen? Java Basics - Anfänger-Themen 2
G Probleme mit log4j Java Basics - Anfänger-Themen 2
M log4j design Java Basics - Anfänger-Themen 11
G log4j Java Basics - Anfänger-Themen 4
S LineNumberReader - bessere Lösung möglich? - Log4J Java Basics - Anfänger-Themen 9
G Kompletten Stacktrace mit Log4j ausgeben Java Basics - Anfänger-Themen 3
M logging mit log4j Java Basics - Anfänger-Themen 4
M log4j frage zu whitespaces Java Basics - Anfänger-Themen 2
G log4j Java Basics - Anfänger-Themen 3
H Log4J Pfad setzen Java Basics - Anfänger-Themen 2
M log4j Unterverzeichnis mit Datum , Timestamp in LogDateiname Java Basics - Anfänger-Themen 2
G Log4j? Java Basics - Anfänger-Themen 15
G Log4j notwendig oder nicht? Java Basics - Anfänger-Themen 16
J Log4j + Junit Java Basics - Anfänger-Themen 4
M log4j XML Konfigurationsdatei Java Basics - Anfänger-Themen 2
M "System.out" "System.err" bzw. log4j Java Basics - Anfänger-Themen 9
K log4j Java Basics - Anfänger-Themen 2
R log4j - Datum an Logdatei anhängen möglich? Java Basics - Anfänger-Themen 7
S log4j "Richtiges" Design Java Basics - Anfänger-Themen 4
B Log4J Anfänger sucht hilfe! Java Basics - Anfänger-Themen 4
N Log4J Problem Java Basics - Anfänger-Themen 4
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
R Swing Component in separate Klasse Java Basics - Anfänger-Themen 4
M Javamail: Mail als separate Datei speichern? Java Basics - Anfänger-Themen 6
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
S Lese- / Schreibfähigkeit von Dateien sicherstellen Java Basics - Anfänger-Themen 1
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
M Formate für Dateien und Pfade? Java Basics - Anfänger-Themen 1
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
L Richtige Reihenfolge der Dateien Java Basics - Anfänger-Themen 5
UnknownInnocent Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
J Logging erzeugt zwei dateien.... Java Basics - Anfänger-Themen 7
A Dateien Verschieben Java Basics - Anfänger-Themen 1
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
C Methoden Dateien im Ordner anzeigen Java Basics - Anfänger-Themen 12
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
E FTP Dateien hochladen Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
Korvinus Vergleichen von 2 csv-Dateien Java Basics - Anfänger-Themen 2
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
M "substring()" mit Dateien und Pfadangaben Java Basics - Anfänger-Themen 5
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
P Einen Ordner mit Dateien hochladen [FTP] Java Basics - Anfänger-Themen 2
X Dateien direkt hintereinander schreiben, Dateiname Java Basics - Anfänger-Themen 25
G Messwerte in 2 Dateien schreiben Java Basics - Anfänger-Themen 20
C Verarbeitung von sehr großen Dateien Java Basics - Anfänger-Themen 52
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
T .jar Datei als Ordner benutzen/ Dateien aus .jar Datei auslesen Java Basics - Anfänger-Themen 3
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
Bluedaishi for schleife um Dateien wieder zusammen zu fügen Java Basics - Anfänger-Themen 11
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
J Dateien für anderen User "mitgeben" Java Basics - Anfänger-Themen 1
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
E Dateien werden nicht gelöscht Java Basics - Anfänger-Themen 10
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
T Fehler beim Schreiben in Dateien! Java Basics - Anfänger-Themen 4
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
K JAR Dateien einbinden - funkt nicht wie es sollte... Java Basics - Anfänger-Themen 22
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
J *.sql Dateien in Java Java Basics - Anfänger-Themen 1
P Dateien im Ordner auflisten. Java Basics - Anfänger-Themen 3
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M Input/Output Arbeiten mit extrem vielen Dateien Java Basics - Anfänger-Themen 8
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
N tar-Dateien Java Basics - Anfänger-Themen 6
B Methoden Dateien konvertieren Java Basics - Anfänger-Themen 3
L Dateien speichern/auslesen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben