2010-12-16 6 views
2

In Web-Entwicklung habe ich mein eigenes Framework, das eine Protokolldatei verwendet, um mir bei der Entwicklung zu helfen und Fehler oder Produktion zu überwachen. Dieses Web-Framework, das fast immer auf * nix läuft, verwendet einen einfachen Klartext als Logfile, Logrotate und Tail.Anwendungsprotokollierung in einem reinen Win32-Projekt

Heute erstelle ich eine Win32-App, die als TCP/IP-Server fungiert (dies ist eine Desktop-App, aber einige Dienste einbetten) und ich muss Ereignisse protokollieren, um zu wissen, wenn die Dinge schlecht laufen Entwicklung, zu debuggen, während ich es erstelle).

Ich erinnere mich an MFC, die ich TRACE Makro hatte. Das war für das Debugging der Entwicklung in Ordnung. Gibt es etwas wie TRACE in der reinen Win32-Entwicklung?

Zum Produktionsprotokoll: Was ist der beste Ansatz für die Ereignisprotokollierung? Windows Event Log oder einfache Nur-Text-Dateien? Wie kann ich es in Windows drehen?

Danke, Daniel Koch

+0

Sie können TRACE durch Ihre eigenen C/C++ - Makros ersetzen ... für welche Art von Protokollierung Sie sich entscheiden, es liegt ganz bei Ihnen - ich habe beides gesehen. – Robert

Antwort

2

Für die Entwicklung in der Regel es ist genug, um einige OutputDebugString Wrap wie folgt zu verwenden:

inline void logA(const char* format, ...) 
{ 
    char buf[1024]; 
    wvsprintfA(buf, format, ((char*)&format) + sizeof(void*)); 
    OutputDebugStringA(buf); 
} 

#define DEBUG_LOG_A(format, ...) logA(\ 
     "(#" BOOST_PP_STRINGIZE(__LINE__) ") "__FUNCTION__ " : " \ 
     format, __VA_ARGS__) 

Und DebugView es zu beobachten.

+0

Nette Funktion, aber brauche ich diese DebugView zu Protokoll anzeigen oder kann ich Konsole von Visual Studio verwenden? Was ist mit dem Produktionsmodus? –

+0

@Daniel Koch: Ja kann MSVS Ausgabefenster verwenden. – Abyx

+0

Abyx, vielen Dank! Ich verwende OutputDebugString in meinem eigenen Makro DEBUG_LOG, um Anwendungen im DEV-Modus zu verfolgen. In der Produktion verwende ich eine SQLite-Datei, die besser exportiert und verwendet wird als ReportEvent (das Ereignisprotokoll ist zu komplex). –

0

Damals habe ich erfolgreich log4cxx.

0

Wenn Sie ATL in Ihrem Projekt verwenden können, schlage ich vor, Sie tun so, wenn Sie nicht durch ein wenig C++ Vorlagen :-)

Angst ist es eine ganz leichte Bibliothek, aber sehr nützlich für Grundoperationen Sie können sich auch dafür entscheiden, statisch zu verlinken. Das ist cool, wenn Sie keine Bereitstellungsprobleme haben möchten.

Und zurück zu der Tracing-Frage, es hat ein ATLTRACE Makro, das ist ziemlich hilfreich.

+0

Danke Simon, aber ich werde C++ hier nicht verwenden. –

2

log4c ist die C-Version des weit verbreiteten log4j-Frameworks (siehe log4cxx oben, das für C++ steht). Sie können dies sicherlich so anpassen, dass Daten überall ausgegeben werden.

Es muss mit GCC kompiliert werden, aber sobald es erstellt wurde, sollten Sie in der Lage sein, die Bibliotheken aus einem Programm zu verwenden, das mit der Microsoft Toolchain kompiliert wurde.

This previous question umfasst einige andere C-Optionen.

+0

Hallo Steve, ich mochte log4c. Aber ich weiß nicht, wie ich es in einer Produktionsumgebung drehen soll. Weißt du wie? Zur Entwicklung glaube ich, dass ich Abyx 'Tipp folgen kann, um OutputDebugString zu verwenden, das ist in Ordnung. –

+0

Wenn Sie rotate sagen, meinen Sie anpassen? Sie können die Bibliothek zur Laufzeit in Prod/Dev konfigurieren, sodass die Ausgabe nur dort erfolgt, wo Sie möchten. Die Dokumentation ist nicht großartig, aber die Standardkonfigurationsdatei im Download sollte indikativ sein. –

Verwandte Themen