gpt4 book ai didi

c - 如何将 __FUNCTION__ 添加到系统日志中

转载 作者:太空宇宙 更新时间:2023-11-04 07:52:27 25 4
gpt4 key购买 nike

我发现以下代码可以将日志添加到系统日志中。但是,如果我还想将 __FUNCTION__ 信息添加到系统日志,该怎么做?

openlog(basename(argv[0]), LOG_CONS | LOG_PID | LOG_NDELAY, LOG_DAEMON);

int logger(int priority, const char *format, ...) {
int result = 0;
va_list args;

va_start(args, format);

vsyslog(priority, format, args);
vfprintf(stderr, format, args);
va_end(args);

return result;

最佳答案

首先,修改记录器以接受函数名:

int logger_internal(const char* func, int priority, const char* format, ...);

而是通过宏来调用:

#define logger(priority, format, ...) \
logger_internal(__FUNCTION__, priority, format, __VA_ARGS__)

修改 logger_internal 的主体以考虑额外参数有点烦人,但并不困难。可能最直接的方法是将函数添加到格式参数之前;所以像(未经测试):

int logger_internal(const char* func, int priority, const char* format, ...) {
va_list args;
size_t func_l = strlen(func);
size_t format_l = strlen(format);

char* fmt = malloc(func_l + format_l + 2);

memcpy(fmt, func, func_l);
fmt[func_l] = ' ';
memcpy(&(fmt[func_l + 1]), format, format_l);
fmt[func_l + 1 + format_l] = '\0';

va_start(args, format);
vsyslog(priority, fmt, args);
va_end(args);

free(fmt);
}

但很明显,这部分取决于您希望系统日志条目看起来像什么。

关于c - 如何将 __FUNCTION__ 添加到系统日志中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52959850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com