これに対処する1つの方法は、マクロのシステムをセットアップすることです。これにより、コードでprintfsを削除しなくても、printfsを簡単にオフにできます。私は次のようなものを使用します:
#define LOGMESSAGE(LEVEL, ...) logging_messagef(LEVEL, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__);
/* Generally speaking, user code should only use these macros. They
* are pithy. You can use them like a printf:
*
* DBGMESSAGE("%f%% chance of fnords for the next %d days.", fnordProb, days);
*
* You don't need to put newlines in them; the logging functions will
* do that when appropriate.
*/
#define FATALMESSAGE(...) LOGMESSAGE(LOG_FATAL, __VA_ARGS__);
#define EMERGMESSAGE(...) LOGMESSAGE(LOG_EMERG, __VA_ARGS__);
#define ALERTMESSAGE(...) LOGMESSAGE(LOG_ALERT, __VA_ARGS__);
#define CRITMESSAGE(...) LOGMESSAGE(LOG_CRIT, __VA_ARGS__);
#define ERRMESSAGE(...) LOGMESSAGE(LOG_ERR, __VA_ARGS__);
#define WARNMESSAGE(...) LOGMESSAGE(LOG_WARNING, __VA_ARGS__);
#define NOTICEMESSAGE(...) LOGMESSAGE(LOG_NOTICE, __VA_ARGS__);
#define INFOMESSAGE(...) LOGMESSAGE(LOG_INFO, __VA_ARGS__);
#define DBGMESSAGE(...) LOGMESSAGE(LOG_DEBUG, __VA_ARGS__);
#if defined(PAINFULLY_VERBOSE)
# define PV_DBGMESSAGE(...) LOGMESSAGE(LOG_DEBUG, __VA_ARGS__);
#else
# define PV_DBGMESSAGE(...) ((void)0);
#endif
logging_messagef()
.c
別のファイルで定義された関数です。メッセージの目的に応じて、コードでXMESSAGE(...)マクロを使用します。この設定の最も良い点は、デバッグとロギングを同時にlogging_messagef()
実行できることです。関数を変更して、いくつかの異なることを実行できます(printfからstderr、ログファイル、syslogまたはその他のシステムロギング機能の使用など)。 。)、および特定のレベル未満のメッセージは、logging_messagef()
不要な場合は無視できます。 PV_DBGMESSAGE()
実稼働環境で確実にオフにしたい大量のデバッグメッセージ用です。