logbuch klasse



  • Nein, Log-Klasse ist schon gut, aber jeder Klasse ein Log-memeber zu geben ist nicht gut.

    Besser zB sowas:

    Log* getLog()
    {
      static Log log;
      return &log;
    }
    // oder 
    LogZBWarning(const std::string& msg)
    {
      getLog()->log(Warning, msg);....
    }
    // Und in den Klassen nur die Funktion aufrufen oder halt den globlen Log holen
    


  • Alternativ könntest du auch ein fertiges Log-Framework nutzen, z.B. https://github.com/gabime/spdlog. Dann kannst du dir in jeder Klasse mit spdlog::get("logger name") den entsprechenden Logger holen.



  • Jockelx schrieb:

    Nein, Log-Klasse ist schon gut, aber jeder Klasse ein Log-memeber zu geben ist nicht gut.

    Besser zB sowas:

    Log* getLog()
    {
      static Log log;
      return &log;
    }
    // oder 
    LogZBWarning(const std::string& msg)
    {
      getLog()->log(Warning, msg);....
    }
    // Und in den Klassen nur die Funktion aufrufen oder halt den globlen Log holen
    

    Vielen vielen dank,
    mensch das ich da nicht früher drauf gekommen bin.
    danke so wird es gemacht!

    grüße



  • Wenn ich das hier lese höre ich wie es im Hintergrund murmelt: Singleton, Singleton ...



  • Du weißt nichts über die Log-Klasse, weißt aber, dass es ein Singleton sein sollte?
    Aha...



  • Naja, der Beispiel Code kommt schon recht nah an das Konzept eines Singletons dran.



  • Welcher Beispielcode?
    Hier steht keine einzige Zeile Code von der Log-Klasse.



  • Dieses hier lässt schon schlüsse ziehen...

    cn00py schrieb:

    Jockelx schrieb:

    Nein, Log-Klasse ist schon gut, aber jeder Klasse ein Log-memeber zu geben ist nicht gut.

    Besser zB sowas:

    Log* getLog()
    {
      static Log log;
      return &log;
    }
    // oder 
    LogZBWarning(const std::string& msg)
    {
      getLog()->log(Warning, msg);....
    }
    // Und in den Klassen nur die Funktion aufrufen oder halt den globlen Log holen
    

    Vielen vielen dank,
    mensch das ich da nicht früher drauf gekommen bin.
    danke so wird es gemacht!

    grüße



  • Das ist wie ich gerade die Log-Klasse nutze.
    Und weil ich das gerade zufällig so mache, soll die Log-Klasse jetzt so geändert werden, dass das jeder zu jeder Zeit so machen muss?
    Singletons haben eh schon einen schlechten Ruf und wenn man Sie so versteht, dann auch zu Recht.



  • Wie ich bereits schrieb, es kommt nah an das Konzept des Singltons ran. Nicht, dass es eins wäre.

    Aus dem Code geht natürlich nicht hervor, dass man nicht auch andere Instanzen der Log Klasse erstellen kann und wenn man das über Library Grenzen hinweg verwendet hat man auch in jeder Library eine eigene Instanz. Aber es kommt trotzdem dem Konzept recht nahe.



  • Singletons haben eh schon einen schlechten Ruf ...

    Davon habe ich zwar auch schon gehört, kann das aber nicht wirklich nachvollziehen.

    Wie ich bereits schrieb, es kommt nah an das Konzept des Singltons ran. Nicht, dass es eins wäre.

    Ob es wirklich eins sein sollte, hängt wohl davon ab, ob es mehrere Instanzen davon geben darf und ob man das ggf. programmtechnisch oder durch Disziplin erreichen will.

    Eine Parallele sehe ich hier:
    Die Klasse hat einen privaten Konstruktor (oder ist komplett statisch).

    Es gibt eine statische Methode get_Log() oder get_Instance(),
    die ggf. die Klasse erzeugt, oder wenn bereits vorhanden, nur den Zeiger darauf zurück gibt.


Anmelden zum Antworten