Hallo Konrad, *;
Du hast an einigen Punkten durchaus recht, nur zwei kurze Einwürfe:
Am 10.04.19 um 13:15 schrieb Konrad Rosenbaum:
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.
Doch. Die Lösung gibt es durchaus - nämlich genau dann, wenn dem
Programmierer sehr gut verdeutlicht wird, daß *er* im Zweifelsfall
derjenige ist, der die Anwendung debuggen muss, wenn sie sich in
Production schief verhält, und daß das Logging, das er implementiert
hat, dann das einzige Werkzeug ist, das *er* zur Verfügung hat. Das
ändert diese Diskussionslage erfahrungsgemäß relativ schnell und
diszipliniert durchaus ein wenig. ;)
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!
Hmmmm. Erwartungshaltung wäre hier, daß sich das Logging-Framework
Deiner Programmiersprache/-umgebung um diesen Kram kümmert. Mit
slf4j+logback+logstash unter Java *ist* es im Zweifelsfall ein
Einzeiler, und ob "hinten" die Statements als Zeile in ein Logfile oder
als Key/Value-JSON in einen Logging-Server geschrieben werden, bekommt
der Nutzer gar nicht mit. Das ist aber weniger eine Frage des
Logging-Outputs denn vielmehr eine Frage der Fähigkeiten des Werkzeugs
auf Entwicklerseite.
Interessant by the way: Bei Kram, der in docker-Containern läuft,
scheint es insgesamt mehr und mehr Standard zu werden, aus der Anwendung
heraus auch nicht mehr in Log*files*, sondern tatsächlich nur noch nach
STDOUT/STDERR zu schreiben und sich darauf verlassen, daß docker die
Logs in geeigneter Weise $IRGENDWOHIN tut - im Standardfall syslog.
Viele Grüße,
Kristian
--
Kristian Rink
https://dm.zimmer428.net/
https://www.flickr.com/photos/z428
https://twitter.com/kr428
https://social.tchncs.de/@z428
"Withering under words you told me:
Comfort in the great machine."