2017-03-01 7 views
1

Ich versuche, einen Websocket-Client (mit libweb Sockets in C) zu implementieren. Ich benutze cmake, um den Software-Kompilierungsprozess zu steuern.Wie Debug-Protokollierung mit Libwebsockets aktivieren?

Meine Frage ist einfach: Wie die Debug-Protokollierung mit Libwebsockets aktivieren?

Zuerst habe ich zusammengestellt und libwebsockets installiert, wie es Hinweise in der Dokumentation sagte über lws Aufbau:

mit Debug-Informationen und _DEBUG für niedrigere Priorität Debug-Meldungen in, verwenden

zusammengestellt bauen

$ cmake .. -DCMAKE_BUILD_TYPE = DEBUG

Von Libwebsock ets 2.1 doc Hinweise zur Codierung mit lws (https://libwebsockets.org/lws-api-doc-master/html/md_README.coding.html):

Debug Logging

Auch lws_set_log_level api verwenden Sie einen benutzerdefinierten Rückruf bereitstellen kann tatsächlich die Log-String emittieren. Standardmäßig verweist dies auf eine interne emit-Funktion, die an stderr gesendet wird. Wenn Sie es auf NULL setzen, bleibt es so, wie es ist.

Eine Hilfsfunktion lwsl_emit_syslog() wird von der Bibliothek nach exportiert, um die Protokollierung in syslog zu vereinfachen. Sie müssen weiterhin setlogask, openlog und closelog in Ihrem Benutzercode verwenden.

Die Logging-APIs sind für Benutzercode zur Verfügung gestellt.

lwsl_err (...) lwsl_warn (...) lwsl_notice (...) lwsl_info (...) lwsl_debug (...) Der Unterschied zwischen Ankündigung und Info ist, dass Hinweis wird standardmäßig protokolliert werden während info standardmäßig ignoriert wird.

Wenn Sie nicht mit _DEBUG Aufbau definiert, das heißt, ohne diese

$ cmake .. -DCMAKE_BUILD_TYPE = DEBUG dann Werte unter Hinweis einloggen Sie nicht tatsächlich in kompiliert bekommen.

Wie in this (official) example, ich setzte lws_set_log_level(10, NULL); am Anfang meiner WebSocket-Hauptfunktion.

CMakeLists.txt:

cmake_minimum_required(VERSION 3.6) 
project(foo) 
set(CMAKE_C_STANDARD 11) 
set(CMAKE_BUILD_TYPE DEBUG) #For CLion IDE but i'm pretty sur it does nothing. 

set(SOURCE_FILES 
     websocket.c 
     websocket.h 
     main.c) 

add_executable(foo ${SOURCE_FILES}) 
target_link_libraries(foo websockets) 

Dann i laufen Cmake:

cmake .. -DCMAKE_BUILD_TYPE=DEBUG 
make 

Alles funktioniert gut, mein websocket Client scheint ok.

Aber ich habe keine Debug-Protokolle ... Was fehlt mir?

Antwort

1

Tks zum lws-Team auf Github:

Die Build Art von DEBUG stoppt mehr ausführliche Protokollierung Arten von während Build entfernt zu sein.

Sie müssen noch zur Laufzeit ermöglichen, mit einem Bitmap in lws_set_log_level() ... der Standardwert ist 7 (err/warn/Bekanntmachung)

ich falsch verstanden libwebsockets.h:

enum lws_log_levels { 
    LLL_ERR = 1 << 0, 
    LLL_WARN = 1 << 1, 
    LLL_NOTICE = 1 << 2, 
    LLL_INFO = 1 << 3, 
    LLL_DEBUG = 1 << 4, 
    LLL_PARSER = 1 << 5, 
    LLL_HEADER = 1 << 6, 
    LLL_EXT = 1 << 7, 
    LLL_CLIENT = 1 << 8, 
    LLL_LATENCY = 1 << 9, 
    LLL_USER = 1 << 10, 

    LLL_COUNT = 11 /* set to count of valid flags */ 
}; 

Wie Andy sagte, der Standard ist , so 7 ...