log: Add helpers for common log levels
authorSimon Glass <sjg@chromium.org>
Mon, 1 Oct 2018 17:55:06 +0000 (11:55 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 9 Oct 2018 10:40:26 +0000 (04:40 -0600)
At present to output a log message you need something like:

   log(UCLASS_SPI, LOCL_INFO, "message1");
   log(UCLASS_SPI, LOCL_INFO, "message2");

but many files use the same category throughout. Also it is helpful to
shorten the length of log names, providing helpers for common logging
levels. Add some macros so that it is possible to do:

   (top of file, before #includes)
   #define LOG_CATEGORY UCLASS_SPI

   (later in the file)
   log_info("message1");
   log_debug("message2");
   log_err("message3");

Signed-off-by: Simon Glass <sjg@chromium.org>
configs/sandbox_flattree_defconfig
include/log.h
test/log/log_test.c
test/py/tests/test_log.py

index 9f672e50635d7455da6becbd99fa4f3b31bc916a..2f8a98c379c913862b99b0bb73bb8915998df76d 100644 (file)
@@ -15,6 +15,7 @@ CONFIG_BOOTSTAGE_STASH_SIZE=0x4096
 CONFIG_CONSOLE_RECORD=y
 CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000
 CONFIG_SILENT_CONSOLE=y
+CONFIG_LOG_MAX_LEVEL=6
 CONFIG_DISPLAY_BOARDINFO_LATE=y
 CONFIG_CMD_CPU=y
 CONFIG_CMD_LICENSE=y
index 75ff1e1160c91ed0a91ead38762dc8742e02a3f9..1d936ec952308a2ab1b8f3b7f20f7b586f109d49 100644 (file)
@@ -88,8 +88,22 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file,
  */
 #if CONFIG_IS_ENABLED(LOG)
 #define _LOG_MAX_LEVEL CONFIG_VAL(LOG_MAX_LEVEL)
+#define log_err(_fmt...)       log(LOG_CATEGORY, LOGL_ERR, ##_fmt)
+#define log_warning(_fmt...)   log(LOG_CATEGORY, LOGL_WARNING, ##_fmt)
+#define log_notice(_fmt...)    log(LOG_CATEGORY, LOGL_NOTICE, ##_fmt)
+#define log_info(_fmt...)      log(LOG_CATEGORY, LOGL_INFO, ##_fmt)
+#define log_debug(_fmt...)     log(LOG_CATEGORY, LOGL_DEBUG, ##_fmt)
+#define log_content(_fmt...)   log(LOG_CATEGORY, LOGL_DEBUG_CONTENT, ##_fmt)
+#define log_io(_fmt...)                log(LOG_CATEGORY, LOGL_DEBUG_IO, ##_fmt)
 #else
 #define _LOG_MAX_LEVEL LOGL_INFO
+#define log_err(_fmt...)
+#define log_warning(_fmt...)
+#define log_notice(_fmt...)
+#define log_info(_fmt...)
+#define log_debug(_fmt...)
+#define log_content(_fmt...)
+#define log_io(_fmt...)
 #endif
 
 /* Emit a log record if the level is less that the maximum */
index de431b0823e3f7c6f6564877140d8fde8332731f..febc2c1252a2301a5b0d9c68332c95d0c444eda8 100644 (file)
@@ -181,6 +181,19 @@ static int log_test(int testnum)
                        return ret;
                break;
        }
+       case 10: {
+               log_err("level %d\n", LOGL_EMERG);
+               log_err("level %d\n", LOGL_ALERT);
+               log_err("level %d\n", LOGL_CRIT);
+               log_err("level %d\n", LOGL_ERR);
+               log_warning("level %d\n", LOGL_WARNING);
+               log_notice("level %d\n", LOGL_NOTICE);
+               log_info("level %d\n", LOGL_INFO);
+               log_debug("level %d\n", LOGL_DEBUG);
+               log_content("level %d\n", LOGL_DEBUG_CONTENT);
+               log_io("level %d\n", LOGL_DEBUG_IO);
+               break;
+       }
        }
 
        return 0;
index 605275b03992d2ad732fbb892b892cf581e5bcb4..cb183444c6fc2343c5e78f986263dab3c3d21f22 100644 (file)
@@ -85,6 +85,11 @@ def test_log(u_boot_console):
         lines = run_test(9)
         check_log_entries(lines, 3)
 
+    def test10():
+        lines = run_test(10)
+        for i in range(7):
+            assert 'log_test() level %d' % i == lines.next()
+
     # TODO(sjg@chromium.org): Consider structuring this as separate tests
     cons = u_boot_console
     test0()
@@ -97,6 +102,7 @@ def test_log(u_boot_console):
     test7()
     test8()
     test9()
+    test10()
 
 @pytest.mark.buildconfigspec('cmd_log')
 def test_log_format(u_boot_console):