Author: aconway
Date: Wed May 14 14:45:29 2014
New Revision: 1594586
URL: http://svn.apache.org/r1594586
Log:
QPID-DISPATCH-16: Don't evalaute qd_log() arguments unless the log message is
enabled.
Modified:
qpid/dispatch/trunk/include/qpid/dispatch/log.h
qpid/dispatch/trunk/src/log.c
Modified: qpid/dispatch/trunk/include/qpid/dispatch/log.h
URL:
http://svn.apache.org/viewvc/qpid/dispatch/trunk/include/qpid/dispatch/log.h?rev=1594586&r1=1594585&r2=1594586&view=diff
==============================================================================
--- qpid/dispatch/trunk/include/qpid/dispatch/log.h (original)
+++ qpid/dispatch/trunk/include/qpid/dispatch/log.h Wed May 14 14:45:29 2014
@@ -18,21 +18,39 @@
* specific language governing permissions and limitations
* under the License.
*/
+#include <stdbool.h>
-#define QD_LOG_NONE 0x00000000
-#define QD_LOG_TRACE 0x00000001
-#define QD_LOG_DEBUG 0x00000002
-#define QD_LOG_INFO 0x00000004
-#define QD_LOG_NOTICE 0x00000008
-#define QD_LOG_WARNING 0x00000010
-#define QD_LOG_ERROR 0x00000020
-#define QD_LOG_CRITICAL 0x00000040
+/** Logging levels */
+typedef enum {
+ QD_LOG_NONE =0x00000000,
+ QD_LOG_TRACE =0x00000001,
+ QD_LOG_DEBUG =0x00000002,
+ QD_LOG_INFO =0x00000004,
+ QD_LOG_NOTICE =0x00000008,
+ QD_LOG_WARNING =0x00000010,
+ QD_LOG_ERROR =0x00000020,
+ QD_LOG_CRITICAL =0x00000040,
+} qd_log_level_t;
typedef struct qd_log_source_t qd_log_source_t;
qd_log_source_t* qd_log_source(const char *module);
+/**@internal*/
+bool qd_log_enabled(qd_log_source_t *source, int level);
+/**@internal*/
void qd_log_impl(qd_log_source_t *source, int level, const char *file, int
line, const char *fmt, ...);
-#define qd_log(s, c, f, ...) qd_log_impl(s, c, __FILE__, __LINE__, f ,
##__VA_ARGS__)
+
+/** Log a message
+ * Note: does not evaluate the format args unless the log message is enabled.
+ * @param s qd_log_source_t* source of log message.
+ * @param c qd_log_level_t log level of message
+ * @param f printf style format string ...
+ */
+#define qd_log(s, c, f, ...) \
+ do { if (qd_log_enabled(s,c)) qd_log_impl(s, c, __FILE__, __LINE__, f ,
##__VA_ARGS__); } while(0)
+
+/** Set the mask to enable log levels, see qd_log_level_t */
+void qd_log_set_mask(int mask);
#endif
Modified: qpid/dispatch/trunk/src/log.c
URL:
http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/log.c?rev=1594586&r1=1594585&r2=1594586&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/log.c (original)
+++ qpid/dispatch/trunk/src/log.c Wed May 14 14:45:29 2014
@@ -160,10 +160,15 @@ void qd_log_source_free(qd_log_source_t*
free(src);
}
+bool qd_log_enabled(qd_log_source_t *source, int level) {
+ if (!source) return false;
+ int mask = source->mask == -1 ? default_log_source->mask : source->mask;
+ return level & mask;
+}
+
void qd_log_impl(qd_log_source_t *source, int level, const char *file, int
line, const char *fmt, ...)
{
- int mask = source->mask == -1 ? default_log_source->mask : source->mask;
- if (!(level & mask)) return;
+ if (!qd_log_enabled(source, level)) return;
qd_log_entry_t *entry = new_qd_log_entry_t();
DEQ_ITEM_INIT(entry);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]