Logging mit der Win32 API

Tikonteroga

Erfahrenes Mitglied
Hallo,

ich entwickle zur Zeit mit der Win32 API. Ich habe jetzt bei der Socket-Programmierung häufig die Funktion WSAGetLastError() verwendet um den Fehlercode bei einem aufgetretenen Fehler (SOCKET_ERROR) zu erhalten.

Bietet mir die Win32 API ein Konzept, wie ich z. B. diese Fehlercodes und eine zugehörige Fehlerbeschreibung z. B. in einem bestimmten Format in einer Datei Loggen kann.

Grüße
 
Hallo Tikonteroga

Ja, die Windows API bietet dir die Möglichkeit die Errorcodes in lesbare Strings umzuwandeln. Dazu hast du die Funktion FormatMessage.

Ein Beispiel dazu:
C++:
	std::wcout << L"Creating socket..." << std::endl;
	auto s = socket(AF_INET, SOCK_STREAM, 0);
	DWORD error = WSAGetLastError();
	LPTSTR messageStr = nullptr;

	int nChars = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, nullptr, error, LANG_SYSTEM_DEFAULT, (LPTSTR) &messageStr, 0, nullptr);
	if (nChars > 0) {
		LPTSTR newLine = _tcschr(messageStr, L'\r');
		if (newLine != nullptr) {
			*newLine = L'\0';
		}

		std::wcout << L"Error: " << messageStr << std::endl;

		LocalFree(messageStr);
	}

Die Verwendung ist grundsätzlich sehr einfach, etwas nervig ist, dass an die Errors fast immer noch \r\n agehängt wird, daher das _tcschr.

Ergebnis ist dann (auf meinem System):
http://puu.sh/5i483.png

Viele Grüsse
Cromon
 
Hallo,

danke für die Antwort. Ich habe mich entschieden den Fehlercode und nicht den Fehlertext zu loggen.

Eine Anwendung, die die Log-Datei verarbeitet und auswertet, kann dann die Fehlercodes in den Fehlertext umwandeln.

Aktuell muss ich in meiner Anwendung die Fehlercodes der Windows.h sowie der WinSock2.h loggen.

Code:
DWORD lastError = GetLastError();

Code:
int lastError = WSAGetLastError();

Ich würde jetzt ungern ein eigenes Dateiformat erfinden. Gibt es hier vielleicht bereits einen bewährten Mechanismus? Ist die Ereignisanzeige von Windows hierfür geeignet?
 
Zurück