aboutsummaryrefslogtreecommitdiff
path: root/lib/vlog.h
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2010-09-13 13:29:57 -0700
committerBen Pfaff <blp@nicira.com>2010-09-23 11:45:34 -0700
commit5136364f41b74de00f86873a6f5be4c8a19cb5ad (patch)
tree4200269f53b16f087a6704ed40d9ba785b3671f3 /lib/vlog.h
parent1095d0996bf83e99eab0be964b66403d3fff76f5 (diff)
vlog: Add VLOG_WARN_ONCE() and similar macros.
Diffstat (limited to 'lib/vlog.h')
-rw-r--r--lib/vlog.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/vlog.h b/lib/vlog.h
index 03f17ea5..a4e143c1 100644
--- a/lib/vlog.h
+++ b/lib/vlog.h
@@ -181,6 +181,12 @@ void vlog_rate_limit(const struct vlog_module *, enum vlog_level,
#define VLOG_DROP_INFO(RL) vlog_should_drop(THIS_MODULE, VLL_INFO, RL)
#define VLOG_DROP_DBG(RL) vlog_should_drop(THIS_MODULE, VLL_DBG, RL)
+/* Macros for logging at most once per execution. */
+#define VLOG_ERR_ONCE(...) VLOG_ONCE(VLL_ERR, __VA_ARGS__)
+#define VLOG_WARN_ONCE(...) VLOG_ONCE(VLL_WARN, __VA_ARGS__)
+#define VLOG_INFO_ONCE(...) VLOG_ONCE(VLL_INFO, __VA_ARGS__)
+#define VLOG_DBG_ONCE(...) VLOG_ONCE(VLL_DBG, __VA_ARGS__)
+
/* Command line processing. */
#define VLOG_OPTION_ENUMS OPT_LOG_FILE
#define VLOG_LONG_OPTIONS \
@@ -208,6 +214,15 @@ void vlog_usage(void);
vlog_rate_limit(THIS_MODULE, LEVEL, RL, __VA_ARGS__); \
} \
} while (0)
+#define VLOG_ONCE(LEVEL, ...) \
+ do { \
+ static bool already_logged; \
+ if (!already_logged) { \
+ already_logged = true; \
+ vlog(THIS_MODULE, LEVEL, __VA_ARGS__); \
+ } \
+ } while (0)
+
#define VLOG_DEFINE_MODULE__(MODULE) \
struct vlog_module VLM_##MODULE = \
{ \