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