Index: uspace/lib/c/generic/io/log.c
===================================================================
--- uspace/lib/c/generic/io/log.c	(revision be73793eb432805810bdd861496ed8a00fa3f441)
+++ uspace/lib/c/generic/io/log.c	(revision 14de4106e8e7a38504393b69ef6f5e22a95d977c)
@@ -194,4 +194,9 @@
 }
 
+bool __log_shall_record(log_level_t level)
+{
+	return get_current_observed_level() >= level;
+}
+
 /** Write an entry to the log.
  *
@@ -201,10 +206,10 @@
  * @param fmt		Format string (no traling newline).
  */
-void log_msg(log_level_t level, const char *fmt, ...)
+void __log_msg(log_level_t level, const char *fmt, ...)
 {
 	va_list args;
 
 	va_start(args, fmt);
-	log_msgv(level, fmt, args);
+	__log_msgv(level, fmt, args);
 	va_end(args);
 }
@@ -217,5 +222,5 @@
  * @param fmt		Format string (no trailing newline)
  */
-void log_msgv(log_level_t level, const char *fmt, va_list args)
+void __log_msgv(log_level_t level, const char *fmt, va_list args)
 {
 	assert(level < LVL_LIMIT);
Index: uspace/lib/c/include/io/log.h
===================================================================
--- uspace/lib/c/include/io/log.h	(revision be73793eb432805810bdd861496ed8a00fa3f441)
+++ uspace/lib/c/include/io/log.h	(revision 14de4106e8e7a38504393b69ef6f5e22a95d977c)
@@ -36,4 +36,5 @@
 
 #include <stdarg.h>
+#include <bool.h>
 
 typedef enum {
@@ -49,7 +50,23 @@
 } log_level_t;
 
+extern bool __log_shall_record(log_level_t);
 extern int log_init(const char *, log_level_t);
-extern void log_msg(log_level_t, const char *, ...);
-extern void log_msgv(log_level_t, const char *, va_list);
+
+#define log_msg(level, format, ...) \
+	do { \
+		if (__log_shall_record((level))) { \
+			__log_msg(level, format, ##__VA_ARGS__); \
+		} \
+	} while (false)
+
+#define log_msgv(level, format, args) \
+	do { \
+		if (__log_shall_record((level))) { \
+			__log_msgv(level, format, args); \
+		} \
+	} while (false)
+
+extern void __log_msg(log_level_t, const char *, ...);
+extern void __log_msgv(log_level_t, const char *, va_list);
 
 #endif
