【发布时间】:2021-02-04 01:16:21
【问题描述】:
我正在做一些调试,并希望将标准错误消息重定向到一个文件;因此,它可以在调试日志文件中查看。 我确实需要从 C 代码完成,而不是通过 UNIX shell 重定向。
我需要调试一些这样的模块。 我有一组写入 strerr(console) 的调试工具。它很容易包含在源代码中,并提供一组舒适的宏和函数以用于调试源代码。
以下是头文件中的代码。
#include <stdio.h>
#define LOGWRAPPER(tag, fmt, args...) \
fprintf(stderr, "%s: " fmt "\n", tag, ##args)
#define LOG_DEBUG(...) LOGWRAPPER(__VA_ARGS__)
...
...
#define LOG_DEBUG(tag, fmt, args...) \
do { \
(true) ? ALOG(LOG_DEBUG, tag, fmt, ##args) \
: fprintf(stderr, "%s" fmt, tag, ##args); \
} while (0)
....
最终所有的打印都会回到这里,也就是头文件。所以我想我必须做一些改变
#define LOGWRAPPER(tag, fmt, args...) \
fprintf(stderr, "%s: " fmt "\n", tag, ##args)
有什么想法吗?还是我应该创建一个文件路径并插入到 fprintf 中?
【问题讨论】:
-
如果您使用宏进行记录,请将
__func__、__FILE__和__LINE__添加到记录的数据中,以便立即清楚它的来源。并且该宏有一个问题 - 对于不是字符串文字的任何格式字符串,它将无法编译。 -
我确实在我的消息行中使用了 func、FILE 和 LINE。注意:最终所有与打印相关的函数都会回调到这个头文件。我现在不明白的事情是如何将 stderr 输出重定向到文件/
-
__func__、__FILE__和__LINE__应该内置在宏中,这样调用者就不必重复输入它们。
标签: c file logging stderr io-redirection