Eigenes Logging - Vorschläge bzw. Vorlagen erbeten



  • Hallo allerseits,

    nachdem ich hier im Forum und im Web schon viel gesucht und gelesen habe, hab ich allerdings noch nichts zufriedenstellendes gefunden.

    Derzeite logge ich alles mit cout, aber das war nur die Notlösung.
    Boost o.ä. kann ich nicht verwenden (anderes Host-System), und da ich nur ein einfaches Logging auf cout benötige, dachte ich, jmd. hat vielleicht ne gute Vorlage?

    Benötigt werden einige Level (INFO, DEBUG usw.) und wie gesagt, sollen alle Sachen nach cout gehen (alle Arten von Typen, Objekten, Zeigern etc.).
    Dazu möchte ich die Datei, Zeile und Funktion mit ausgeben.
    In C wird das ja alles (bzw. viel) mit Präprozessor-Makros und Defines gemacht.

    Wie funktioniert das denn mit C++? Auch einfach mit Präprozessor Makros und defines? Wenn jemand was entsprechendes hat (ganz einfach gestrickt) und gern teilen möchte, immer gern (Links auf Ideen/Vorlagen sind natürlich auch willkommen!).

    Was ist denn von solchen Sachen wie log4C++ zu halten (kenne log4j von früher und das war echt klasse)?

    Dank euch schon mal!

    Ciao



  • Sollte eigentlich relativ schnell selbst zu realisieren sein.
    Einfach ne Klasse mit einem stream nach draußen den du dann in eine Datei lenkst, und eine Mehtode, mit dem log-level als Parameter, um log-Einträge zu machen.



  • Hm, wie bekommt man denn mit einer Methode hin, dass ähnlich wie beim cout Parameter mit verschieden Typen übergeben werden können (bin noch nicht so firm mit C++)?



  • Mittels Überladung von Operatoren in C++ (Teil 1) (s. insb. "3.4 operator<<, >>") bzw. Überladen von Funktionen.



  • Ok, danke - muss ich mir nochmal näher zu Gemüte führen, bin noch reichlicher Anfänger, was C++ anbelangt.

    Laufe ich damit nicht Gefahr "nur" einen cout nachzubauen, mit einigen Leveln?

    Und gibt es in C++ eine andere Möglichkeit, das Ganze auch elegant zu deaktivieren und z.B. nicht mit in das Ergebnis zu compilieren, so wie es in C mit den Makros gemacht wird? Möchte auch die Log-Methodenaufrufe vermeiden, wenn ich eine Executable ohne Logausgabe bauen will.



  • Wenn du mit Aufgaben überfordert bist, dann musst du dir einfach sagen, dass du soweit noch nicht bist und dir Aufgaben stellst, die auch deinen C++ Kenntnissen entsprechen.

    Wieso willst du ein eigenes Logging bauen? Eine gute Anlaufstelle ist doch github. Dann such einfach nach language:C++ stars:>99 logging und schau dir die Repos durch. Als Anfänger willst du dann wohl eine Header-Only Lösung, damit du einfach die Header in dein Projektverzeichnis kopierst und sie schon benutzen kannst. Und wenn du mehrere Repos findest, die dich interessieren, dann schau nach, was andere Leute dazu schreiben, z.B. gibt in google site:reddit.com "spdlog" "easyloggingpp" ein. Und was am Ende übrig bleibt lädst dir runter und testet es selbst aus.



  • Danke, an github hatte ich nicht mehr gedacht (log4c++ hatte ich früher schon mal angesehen).

    Wie eingangs erwähnt: Muss kein eigenes Logging sein, wenn es die Dinge kann, die "ich gern hätte" 😃 , dann nehm ich gern ein Existierendes.
    Aufgrund des Host-Systems bin ich aber limitiert, was Libs wie z.B. Boost o.ä. angeht - auf AmigaOS4(3). Dort hat es den GCC4.2.4 - konnte noch nicht final heraus finden, was der alles unterstützt. Aus der Aufstellung hier würde ich entnehmen, kein C++ 2011 Standard. Header-only klingt aber schon mal sehr gut!

    Kannst Du (oder sonst jemand) denn eins empfehlen?



  • Reth schrieb:

    Kannst Du (oder sonst jemand) denn eins empfehlen?

    Eventuell emilk/loguru auf github?



  • Danke, hab mich mal ein bisschen in das Bsp. eingelesen.

    Leider nutzt das auch C++11 Teile, nicht nur in den includes, sondern auch im Code (RValue Referenzen).

    Beim Anschauen des Codes hab ich wieder festgestellt, dass ich bei C++ noch vor dem Anfang stehe, schon was den "alten" Standard betrifft - von den neueren Sachen ganz zu schweigen (meine Kenntnisse und Praxis in C und Java sind leider schon viele Jahre Vergangenheit).
    Versuche daher gerade C++ in 21 Tagen durchzuarbeiten - aber komme nur mühsam voran (da wenn, dann nur abends Zeit und da fehlt dann meistens Aufnahmefähigkeit und Motivation bzw. muss sich dies die Zeit mit anderen Dingen teilen!).



  • Als Anfänger muss ich hier auch mal eine Frage zu dem Thema stellen. Wenn ich etwas loggen möchte, würde ich nach meinem bisherigen Kenntnisstand fstream dazu benutzen. Wahrscheinlich würde ich mir eine Funktion basteln, welcher ich z.B. einen std::string übergebe und den Rest lasse ich die Funktion erledigen. Meint ihr das ist gescheit? Oder ist das eher der falsche Anwendungsfall für fstream?



  • @out:
    Hab auf GitHub plog gefunden. Das könnte funktionieren. Nochmals danke für den Tip!


Log in to reply