我正在尝试将我的GStreamer应用程序日志信息通过GST_DEBUG
和GST_ERROR
发送到日志文件。我已尝试在GST_DEBUG
和代码中设置环境变量GST_DEBUG_FILE
和CMakeLists.txt
,但没有运气。
问题1:我需要做些什么来修复日志记录?
问题2:我可以同时通过GST_DEBUG
,GST_ERROR
等和stdout
进行记录吗?
执行GST_DEBUG("THIS IS A TEST".")
时,终端和日志文件中都没有输出。
在`CMakeLists.txt:
find_package(PkgConfig)
pkg_check_modules(GST REQUIRED gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-app-1.0)
set(GST_DEBUG "*:6")
set(GST_DEBUG_FILE /var/log/myapp.log)
set(GST_DEBUG_DUMP_DOT_DIR ${ROOT_DIR}/tmp)
add_executable(myapp, ${SOURCE_FILES})
target_compile_options(myapp, ${CMAKE_C_FLAGS} ${BUILD_FLAGS} ${GST_CFLAGS} ${GST_DEBUG_OPTIONS} -g -ggdb -Wall -pedantic -enable-gst-debug=yes)
请注意,出于某种原因,我无法构建前缀enable-gst-debug = yes和两个" - ",即" - enable-gst-debug = yes"不编译,但" -enable-gst-debug = yes"确实
此外,GST_DEBUG_DUMP_DOT_DIR不适用于CMakeLists.txt,但是如果我使用" GST_DEBUG_DUMP_DOT_DIR =' ../ tmp'来自脚本运行我的应用程序。 ' MyApp的'"然后生成点文件。认为这可能是相关的。
在C:
GST_DEBUG_CATEGORY_STATIC(myapp)
#define GST_CAT_DEFAULT myapp
// Called previously when main parses args
g_option_context_add_group(pCntx, gst_init_get_option_group());
void init_myapp() {
gst_init(NULL, NULL);// I know this is rather redundant because gst_init_get_option_group() has been called already.
GST_DEBUG_CATEGORY_INIT(myapp, "myapp", 0, "Custom debugging cat.");
setenv("GST_DEBUG", "*:6", 1);
setenv("GST_DEBUG_FILE", "/var/log/myapp.log", 1);
GST_DEBUG("THIS IS A TEST.");
}
答案 0 :(得分:1)
Cmake是构建系统,它与正在运行的进程的环境变量无关。 您可以做的是使用cmake设置默认值,如下所示:
user www-data;
设置环境变量的正确方法是使用
# for escaped definitions
cmake_policy(SET CMP0005 NEW)
set(DEFAULT_GST_DEBUG "*:6" CACHE STRING "Default value for GST_DEBUG")
set(DEFAULT_GST_DEBUG_FILE /var/log/myapp.log CACHE STRING "Default value for GST_DEBUG_FILE")
set(DEFAULT_GST_DEBUG_DUMP_DOT_DIR ${ROOT_DIR}/tmp CACHE STRING "Default value for GST_DEBUG_DUMP_DOT_DIR")
add_definitions("-DDEFAULT_GST_DEBUG=\"${DEFAULT_GST_DEBUG}\"")
add_definitions("-D=DEFAULT_GST_DEBUG_FILE\"${DEFAULT_GST_DEBUG_FILE}\"")
add_definitions("-DDEFAULT_GST_DEBUG_DUMP_DOT_DIR=\"${DEFAULT_GST_DEBUG_DUMP_DOT_DIR}\"")
...
或
$ export VAR=VAL
用户必须能够覆盖您的默认值,不能使用该功能 来自用户。
$ VAR=VAL ./a.out
也应该有效,但即使the documentation从未提及过
它,我怀疑这些环境变量必须在之前设置
setenv
被称为,因为我认为这是一个地方
环境变量被评估,因此之后可能会更改它们
对GStreamer中的日志记录行为没有影响。
您还可以选择将gst_init(NULL, NULL);
和argc
传递给argv
,但是
文档说未知的命令行选项会导致此功能
中止程序执行 cite 和API documentation
展示了如何处理它。
所以你可以这样做:
gst_init
现在,您可以使用#include <stdlib.h>
GST_DEBUG_CATEGORY_STATIC(myapp)
#define GST_CAT_DEFAULT myapp
int init_myapp();
int main(int argc, char **argv)
{
// the setenvs must come before the gst_init
char *env = getenv("GST_DEBUG");
if(env == NULL)
setenv("GST_DEBUG", DEFAULT_GST_DEBUG, 1);
env = getenv("GST_DEBUG_FILE");
if(env == NULL)
setenv("GST_DEBUG_FILE", DEFAULT_GST_DEBUG_FILE, 1);
env = getenv("GST_DEBUG_DUMP_DOT_DIR");
if(env == NULL)
setenv("GST_DEBUG_DUMP_DOT_DIR", DEFAULT_GST_DEBUG_DUMP_DOT_DIR, 1);
// if you must
g_option_context_add_group(pCntx, gst_init_get_option_group());
init_myapp();
...
}
int init_myapp()
{
// this should be the first call!
gst_init(NULL, NULL);
GST_DEBUG_CATEGORY_INIT(myapp, "myapp", 0, "Custom debugging cat.");
}
或cmake
-DDEFAULT_GST_DEBUG=value
更改cmake中的默认值。
希望对你有所帮助。