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

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

Antwort per Email an