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

Attachment: signature.asc
Description: This is a digitally signed message part.

Antwort per Email an