Hi,
On Wednesday, 10 April 2019 13:40:39 CEST Kristian Rink wrote:
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. ;)
Das funktioniert in kommerziellen Umgebungen unter zwei möglichen Vorraussetzungen:
a) Du hast genug Druckmittel gegenüber den Programmierern - aber auf der Negativseite hast Du dann auch eine große Fluktuation. Zumindest wenn der Rest der Arbeitsumgebung nicht absolut phantastisch ist.
b) Du hast hinreichende Mengen an Bestechungsschokolade. Und dann funktioniert das auch nur für kurze Fristen.
Programmierer sind eine Spezies die mehr Energie investiert faul sein zu können als andere in harte Arbeit. Auf diese Weise haben wir Programme mit so wunderbar lesbaren Namen wie "rm", "ls" oder "awk" bekommen... ;-)
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.
Wenn man diesen Koloss in eine einzige Zeile packen kann, dann gerne.
Also sowas: Logging.debug("frobnicating...",LV(size),LV(resultSize));
Die Menge an Templates, Macros und anderen unschönen Konstrukten hinter "LV" kehren wir mal ganz gekonnt unter den Teppich...
Wie Du schon festgestellt hast hängt das alles stark vom Framework ab.
Der einzige Hinderungsgrund ist dass es bisher keinen neuen passenden Standard gibt. Der existierende Standard ist syslog und/oder dumme Dateien.
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.
Du wirst mich gleich hassen: ich liebe diese Lösung! Das ist doch mal was für faule Programmierer! Ich brauche noch nicht einmal ein minimales Log-Framework lernen.
Konrad