如何向 C++ 日志宏添加额外参数
How to add an extra argument to a C++ log macro
假设我有下面的日志记录宏
TRACE(类型、子类型、消息、fmt、args);
现在我有一个要求打额外的参数,说这个日志的机器IP:
#include <conio.h>
char *IP = "100.200.200.100";
#define TRACE(type, sub-type, message, fmt, args) do{ <<<< expands to func which logs to a file >>>> }while(0)
#define NEW_TRACE(type, sub-type, message, fmt, args) do { \
TRACE (type, sub-type, message, fmt, ##args); \
} while (0)
int main()
{
char *w = "world!";
NEW_TRACE("my-type", "my-subtype", 2, "Hello %s", w);
return 0;
}
如何编写 NEW_TRACE 以便将 'IP' 打入日志?
有什么想法吗!?
如果 fmt 始终是字符串文字,这应该有效:
#define NEW_TRACE(type, sub-type, message, fmt, args) do { \
TRACE (type, sub-type, message, "IP:%s " fmt, IP, ##args); \
} while (0)
(免责声明:未经测试)
在 C++ 中,与 C 一样,您可以直接连接字符串文字,"part1" "part2"
与 "part1part2"
相同。
您可以将带有可变参数的宏扩展到宏。
现有 => TRACE( x, y)
扩展 => TRACE( x, y, ...)
e.g. #define TRACE(fmt, ...) printf(fmt, ##__VA_ARGS__)
这里VA_AGRS, as well as tricks,可以帮到你。
假设我有下面的日志记录宏
TRACE(类型、子类型、消息、fmt、args);
现在我有一个要求打额外的参数,说这个日志的机器IP:
#include <conio.h>
char *IP = "100.200.200.100";
#define TRACE(type, sub-type, message, fmt, args) do{ <<<< expands to func which logs to a file >>>> }while(0)
#define NEW_TRACE(type, sub-type, message, fmt, args) do { \
TRACE (type, sub-type, message, fmt, ##args); \
} while (0)
int main()
{
char *w = "world!";
NEW_TRACE("my-type", "my-subtype", 2, "Hello %s", w);
return 0;
}
如何编写 NEW_TRACE 以便将 'IP' 打入日志? 有什么想法吗!?
如果 fmt 始终是字符串文字,这应该有效:
#define NEW_TRACE(type, sub-type, message, fmt, args) do { \
TRACE (type, sub-type, message, "IP:%s " fmt, IP, ##args); \
} while (0)
(免责声明:未经测试)
在 C++ 中,与 C 一样,您可以直接连接字符串文字,"part1" "part2"
与 "part1part2"
相同。
您可以将带有可变参数的宏扩展到宏。
现有 => TRACE( x, y)
扩展 => TRACE( x, y, ...)
e.g. #define TRACE(fmt, ...) printf(fmt, ##__VA_ARGS__)
这里VA_AGRS, as well as tricks,可以帮到你。