PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : welche programmiersprache zum auslesen von logfiles



mr-sansibar
14-01-2007, 13:23
Hallo !
könnt ihr mir eine Programmiersprache empfehlen, welche LogFiles schnell ausliest und in eine Oracle-datenbank shreibt.
Ablauf muss schnell sein, da sich die LogFiles täglich um mehrere GByte groß sind.

Vielen dank

Waxolunist
15-01-2007, 09:13
Na hier ist wohl PLSQL prädestiniert.

Schnell, einfach und nativ auf Oracle.
Kein Gepfusche mit Datenbankconnectoren, etc.

Christoph
15-01-2007, 14:21
Kann PL/SQL denn Dateien auslesen und parsen? Gemäß http://www.ioug.org/python.pdf scheint PL/SQL dafür ungeeignet zu sein.

Ich würde Dir also eher Python empfehlen, wenn Du eine leicht erlernbare/verstehbare Sprache verwenden willst. Wenn Du eine kryptische Sprache für Wurschtler bevorzugst, dann geht das auch sehr gut mit Perl.

Waxolunist
15-01-2007, 14:31
Perl ist nicht so kryptisch.

Aber du brauchst natürlich bei Python einmal den Interpreter, etc.

Bei PLSQL läuft das schon dort. Und natürlich kann man ganz bequem Files auslesen, zerlegen, schreiben und was sonst noch mit PLSQL. Sogar REGEX funzt damit.

@Christoph:
Leider ist das natürlich wieder mal ein Dokument ohne Datumsangabe, und damit in seiner Bewertung von PLSQL (welche Version?) unbrauchbar. Dazu reden die hier von einem SQL-Prompt. Damit arbeite ich auf Oracle aber schon lange nicht mehr in der Entwicklung, ausser hin und wieder in der Wartung um ein paar Skripts aufzurufen.

mr-sansibar
15-01-2007, 20:56
ist es auch möglich mit log4j dies durchzuführen.
und zwar liege die Logfiles in txt-format.
und das parsen soll abends durchgeführt werden, und die werte möchte ich in einen Datawarehouse rein packen, um später das Nutzerverhalten zu analysieren.

ist es möglich mit plsql einen automatischen start abends durchzuführen ?
und ein weiteres Problem ist, wenn die logfiles von seiner Struktur her geändert werden, dann wird auch das parsen schwierig, da sollte schon eine dynamik rein !!!


gibt es dazu vielleicht ein paar Tips ....

danke

Waxolunist
15-01-2007, 21:23
Also log4j verwendet man zum Schreiben von Logs. Nicht zum Lesen.

Kommt halt drauf an, welches Ausgabeformat du zum Loggen verwendest.

Wenn du XML verwendest, dann kannst du mit PLSQL ein einfaches insert ausführen, da Oracle auch XML-Dateien sehr einfach verarbeiten kann. Such einfach mal nach Oracle und XML.

Oracle hat auch einen Scheduler. Mit dem kann man ähnlich wie mit Cron zeitgesteuert Skripte ausführen.

Wenn du eine Java-Lösung bevorzugst, so wird es schon schwieriger. Zuerst musst du die Connections aufbauen. Dann eben in Java parsen und diese dann in die DB einfügen.

mfg, Christian

mr-sansibar
16-01-2007, 15:59
kann man mit log4j die logfiles in text-form generieren und anschließend in eine datawarehouse speichern mit einer appender-funktion
oder ist beides nicht möglich.
sorry bin in diesem Gebiet log4j noch Neuling

Waxolunist
16-01-2007, 16:22
log4j kann man so konfigurieren, dass es Logs in Textform oder in XML oder in anderen Formate generiert. Dazu kann man Patterns angeben für das Format. Würde dir dazu ein Buch oder die Apache-Seite ans Herz legen. Es ist zwar recht einfach zu konfigurieren für Standardsachen, aber schwer, wenn man etwas ganz bestimmtes sucht.

Das ganze in einer DB zu speichern ist kein Problem.

Ein Beispiel aus meinem Logfile:


<log4j:event logger="at.pdts.epa.prepaid.jsp.taglibrary.ResourceLangFie ldTagFormat" timestamp="1168962885565" sequenceNumber="0" level="DEBUG" thread="WebContainer : 1">
<log4j:message><![CDATA[unscaledBigDecimalToScaledBigDecimal(): No Typedef for: cardsDebit Value: 0]]></log4j:message>
<log4j:properties>
<log4j:data name="hostname" value="localhost"/>
<log4j:data name="log4j.remoteSourceInfo" value="localhost:2577"/>
<log4j:data name="log4jid" value="216"/>
</log4j:properties>
</log4j:event>


Oder anderes log4j:

[2007-01-10 01:54:38,778] com.ibm._jsp._errorPage ERROR - function/adminfunctions/admin_view_data_carrier kazB4ai2HNKlBJjrJ_SIVkt java.lang.String Exception: java.lang.ClassCastException: java.lang.String

Beides kann man parsen, wobei das erste einfacher zu parsen ist, da XML.

Entweder du parst es vorher und zerteilst es in seine einzelnen Eigenschaften z.B. mit XPATH und machst dann ein insert (in java oder in plsql ist letztendlich wurst), oder du machst dir die Arbeit und arbeitest dich in die Oracle XML-Features ein und speicherst es direkt in der DB mit Hilfe eines XML-Schemas.

Das wäre die eine Herangehensweisen. Es gibt aber noch und das ist was du wahrscheinlich suchst, nach dem du es endlich im 3. Post geschrieben hast ein JDBC-Appender für Log4j.

Damit habe ich aber keinerlei Erfahrung. Google bitte daher nach JDBCAppender.

mfg, Christian

mr-sansibar
17-01-2007, 18:34
@waxolunist:
vielen dank, die logfiles liegen text form leider, daran wird sich auch nichts ändern.
gibt es den keinen oracle-batch der das parsen übernacht übernimmt ?

Waxolunist
18-01-2007, 10:23
Ich dachte du könntest log4j konfigurieren? Dann könntest du 2 Appender konfigurieren. Einen für textFiles und einen für die DB.

Ansonsten musst du den Parser selbst schreiben und den regelmäßig starten lassen, seis über einen Cron oder über den internen Scheduler von Oracle.

Waxolunist
18-01-2007, 13:35
Nein, ein Appender parst nicht. Log4j liest nicht, es schreibt. Der JDBCAppender leitet die Ausgabe statt in ein Textfile, in ein DBMS um.

Parsen: Das muss man selbst schreiben, oder du findest irgendein Programm, das genau die gleiche Art von Textfiles parst, die du erzeugst mit log4j, die gleiche Information extrahiert wie du sie benötigst, etc.......

Parsen ist nicht schwer und geht mit jeder Programmiersprache.

mr-sansibar
18-01-2007, 14:00
ok vielen dank !!!