logfile erstellen



  • Guten Abend zusammen,

    ich habe innerhalb eines größeren Programms eine Funktion die ein Logfile erstellen soll. Die Funktion arbeitet aber sporadisch nicht richtig. D.h. manchmal wird ein logfile erstellt und manchmal nicht. Mir ist noch kein Zusammenhang aufgefallen wann es funktioniert und wann nicht. Der Rest des Programms arbeitet einwandfrei.

    Hier die Funktion:

    void write_to_logfile(char *command, char *direction)
    {
      time_t rawtime;
      struct tm * timeinfo;
      time ( &rawtime );
      timeinfo = localtime ( &rawtime );
    
      logfile = fopen ("./logfile","a+");
    
      fseek (logfile, 0, SEEK_END);
      fprintf (logfile, "%.24s: %.2s [%-30.30s]\n",asctime (timeinfo), direction, command);
      fclose (logfile);
    }
    

    Ich arbeite auf Ubuntu mit QTCreator (QT4.5, g++ 4.3.3). Der Compiler liefert keine Fehler/Warnungen aus dieser Funktion.

    Ich bin leider nicht wirklich fit in C++ und mit meinem Latein am Ende.

    Vielen Dank schonmal für eure Hilfe!

    Vg
    Mathias



  • aber du willst c++ programmieren und nicht c?
    das, was du dort machst hat nämlich nix mit c++ zu tun - dafür aber ne ganze menge mehr mit c ;P

    bb



  • Ich weiß, mir liegt C eigentlich auch etwas mehr. Intuitiv orientiere ich mich daher eher an C als an C++.

    Aber der Code sollte trotzdem passen, oder?



  • matze251284 schrieb:

    Ich weiß, mir liegt C eigentlich auch etwas mehr. Intuitiv orientiere ich mich daher eher an C als an C++.

    Aber der Code sollte trotzdem passen, oder?

    sieht nicht gerade so aus^^
    warte einfach, bis dich ein mod ins c unterforum verschiebt oder poste dort noch ma neu und sag hier bescheid...
    ich jedenfalls sehe zwar, was der code tun soll, aber kann dir nicht sagen, wo der fehler liegen könnte, weils eben c ist : P



  • Wie würde man denn sowas in C++ lösen? Zwei drei Anhaltspunkte reichen, dann versuch ichs selber zusammenzubasteln...



  • 1. http://www.cplusplus.com/reference/
    2. std::ofstream bzw std::fstream
    2. b) std::ios_base (app oder ate - weiß ich nie^^)
    3. std::localtime
    4. std::stringstream
    5. std::string

    bb



  • Vielen Dank!



  • np - ich hoffe, es sind genug stichpkt für dich^^
    kannst ja (am ende) mal zeigen, was du produziert hast^^

    bd


  • Mod

    Es gibt da übrigens auch noch ein Standardstreamobjekt mit dem schönen Namen clog. Rate mal, wozu man das nutzen kann :). Geht allerdings in den meisten Fällen erstmal nach stderr, aber man kann ja entweder clog oder stderr in eine Datei umlenken, wenn man will.



  • SeppJ schrieb:

    Es gibt da übrigens auch noch ein Standardstreamobjekt mit dem schönen Namen clog. Rate mal, wozu man das nutzen kann :). Geht allerdings in den meisten Fällen erstmal nach stderr, aber man kann ja entweder clog oder stderr in eine Datei umlenken, wenn man will.

    geht es nicht nach stdout ?
    ich dachte bisher, das wären die defaults:
    std::cerr => /dev/stderr
    std::cout => /dev/stdout
    std::clog => /dev/stdout
    std::cin => /dev/stdin

    Egal, wie nun der default ist, das vorgehen ist sehr simpel, wie gesagt wurde:

    ofstream objekt erstellen, std::clog dahin umleiten <- am besten beim programm init
    Dann kannst überall std::clog << "Log Messsage"; nutzen.
    Wenn du jetz aber automatisch in der Logfile die time haben willst,
    dann kannst von std::ofstream ableiten und das schreiben überladen, sodass erstmal ne time vorne dran gehängt wird.

    Das wäre der C++ weg ...



  • allerdings braucht man einen manipulator ähnlich wie std::endl...
    `my_logg << "asd = " << asd() << "\r\n";

    my_logg << "def = " << def() << "\r\n";würde ja entweder gar nicht oder nach jedem << die zeit angeben... also bräuchte man intern noch nen bool, der anzeigt, ob die zeit eingefügt werden soll der wird beim erstellen auf true gesetzt und ansonsten nach jedemendl` (bzw nach jedem flush.)
    was eleganteres fällt mir hier gerade nicht wirklich ein...

    bb


Anmelden zum Antworten