2017-03-01 112 views
1

我想实现一个websocket客户端(在C中libwebsockets)。我使用cmake来控制软件编译过程。如何使用Libwebsockets启用调试日志记录?

我的问题很简单:如何使用Libwebsockets启用调试日志记录?

首先我编译和喜欢它的文档注中说,安装libwebsockets关于建立LWS

要建立与调试信息和_DEBUG用于编译优先级较低的调试消息 ,使用

$ cmake的.. -DCMAKE_BUILD_TYPE = DEBUG

Libwebsock ETS 2.1文档有关与LWS (https://libwebsockets.org/lws-api-doc-master/html/md_README.coding.html)编码注:

调试日志

而且使用lws_set_log_level API,您可以提供一个自定义的回调 实际发出的日志字符串。默认情况下,这指向发送到stderr的内部 emit函数。将其设置为NULL会使其保留为 。

帮助函数lwsl_emit_syslog()从库中导出到 简化了对syslog的记录。您仍然需要在用户代码中使用setlogmask,openlog 和closelog。

日志apis可用于用户代码。

lwsl_err(...)lwsl_warn(...)lwsl_notice(...)lwsl_info(...) lwsl_debug(...)的通知和信息之间的区别是,通知 会被默认记录而信息在默认情况下被忽略。

如果你不定义_DEBUG,即在建筑,没有这个

$ cmake的.. -DCMAKE_BUILD_TYPE =然后调试日志下面通知水平并没有 真正得到编译英寸

this (official) example,我把lws_set_log_level(10, NULL);放在我的websocket主函数的开头。

的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) 

然后我运行cmake:

cmake .. -DCMAKE_BUILD_TYPE=DEBUG 
make 

一切正常,我的WebSocket客户端似乎确定。

但我没有调试日志...我错过了什么?

回答

1

韩国社交协会的LWS-队在Github上:

调试的生成类型被 构建过程中去除停止更详细的日志记录类型。

你仍然需要使用位图在运行时,使他们在 lws_set_log_level()...... 默认为7(ERR /警告/通知)

我误解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 */ 
}; 

就像安迪说,默认为,所以7 ...

相关问题