Hi,
ich spiele mal Advokat für den netten Herrn mit Dreizack im roten Jacket...
On Wednesday, 10 April 2019 09:54:55 CEST Thomas Güttler wrote:
ich habe irgendwie keinen Bock mehr auf "Logging to file".
Wer hat schon Bock auf Log.
Zeilenweise schreiben ist für uns Programmierer aber nun mal am einfachsten. Was nicht einfach ist wird nur gemacht wenn es dringend notwendig ist. Wenn Du Logs haben willst, dann lebe mit Files!
Mag sein, dass das Unix-Konzept die letzten hundert Jahr gut funktioniert hat, aber zB Apache Logs zeilenweise in eine Datei zu schreiben hat deutlich Nachteile.
1: Logrotate. Nervt.
Besser als kein Logrotate (Riesendatei) oder Windows Event-Logs.
2: Unstrukturiert. Das Log ist eine einfach ascii-Zeile. Ich hätte aber gerne Key-Value Paare.
Und ich hätte gerne ein Einhorn mit schottischer Flagge am Horn! ;-) (Gestern war "National Unicorn Day".)
Im wesentlichen werden Logs aus zwei Gründen geschrieben:
a) weil es ab und zu Ereignisse gibt, die für's Audit wichtig sind (Server hochfahren, Server runterfahren, Server umkonfiguriert, fataler Fehler).
b) Debugging: weil kein Programmierer fehlerfrei arbeitet, auch wenn er es nur ungern zugibt.
Bei a) kannst Du Joe Durchschnittsprogrammierer noch überreden das irgendwohin strukturiert zu schreiben. Seine Auffassung von "Wichtig" wird aber nur einen Bruchteil von dem abdecken was Du als wichtig betrachtest. Bei fatalen Fehlern gibt es aber keine Garantien!
Bei b) kannst Du entweder eine ganz einfache Lösung oder keine Lösung bekommen. Je schwieriger es ist ein Log zu schreiben umso unwahrscheinlicher ist es dass Du ein Log bekommst.
Das ist der Idealfall für den Programmierer: syslog(LOG_DEBUG,"frobnicating the fnord: %i -> %i",size,resultSize);
Das ist die Grenze des Erträglichen:
mLog = Logger.getLogObject(); mLog.print(LOG_DEBUG,"frobnicating the fnord: %i -> %i",size,resultSize);
Wenn ich sowas machen muss:
mCategory = LogManager.createCategory(LOG_APP|LOG_WEBSERVICE, "Frobnification Service",stringList{"size","resultSize"}); mLog = LogManager.getCategory(mCategory).getLogger(LOG_DEBUGLOGGER); values=mLog.createValues(); values.insert("size",size); values.insert("resultSize",resultSize); values.insert(LOG_TEXT,"frobnicating the fnord"); mLog.sendToDataBase(values);
...dann nehme ich als Programmierer printf und entferne die Anweisungen wieder bevor ich liefere. Soll der LUser doch core-Files schreiben!
Auch im open source Bereich ist die Werbemaschine kräftig am Laufen, so dass unklar ist, was sinnvolle Technik ist und was Marketing-Bla-Bla ist.
Na logisch muss man mächtig Werbung machen wenn man auch nur einen winzigen Bruchteil der Entwickler von einzeiligen Log-Anweisungen weglocken will!
Frage 1: Könnt ihr die Aussage (Keinen Bock mehr auf "Logging to file") nachvollziehen?
Im ersten Augenblick als Admin: ja, das klingt verführerisch.
Wenn ich darüber nachdenke: im Gottes Willen! Bleib mir mit diesem Teufelszeug vom Leib! ;-)
Frage 2: Hat jemand schon eine Alternative zu Logfiles ausprobiert. Ein Erfahrungsbereicht aus der Praxis wäre interessant.
Ich habe es noch nicht ausprobiert, aber: beim letzten Server-Crash war ich froh dass ich einfache ASCII-Logs hatte, sonst wären die Logs Schrott gewesen - Datenbanken (egal welcher Art) vertragen es im Allgemeinen nicht sehr gut wenn einzelne Blöcke durch Binär-Schrott ersetzt werden, weil das Dateisystem die Synchronisation nicht geschafft hat oder weil die Platte Probleme hatte. Ich als Admin mit grep und less bewaffnet kann leise vor mich hin fluchen und einfach weiterlesen...
Konrad