log: Add helpers for common log levels

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>
lime2-spi
Simon Glass 6 years ago
parent fbcf37e48e
commit cdd140af5c
  1. 1
      configs/sandbox_flattree_defconfig
  2. 14
      include/log.h
  3. 13
      test/log/log_test.c
  4. 6
      test/py/tests/test_log.py

@ -15,6 +15,7 @@ CONFIG_BOOTSTAGE_STASH_SIZE=0x4096
CONFIG_CONSOLE_RECORD=y CONFIG_CONSOLE_RECORD=y
CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000 CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000
CONFIG_SILENT_CONSOLE=y CONFIG_SILENT_CONSOLE=y
CONFIG_LOG_MAX_LEVEL=6
CONFIG_DISPLAY_BOARDINFO_LATE=y CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_CMD_CPU=y CONFIG_CMD_CPU=y
CONFIG_CMD_LICENSE=y CONFIG_CMD_LICENSE=y

@ -88,8 +88,22 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file,
*/ */
#if CONFIG_IS_ENABLED(LOG) #if CONFIG_IS_ENABLED(LOG)
#define _LOG_MAX_LEVEL CONFIG_VAL(LOG_MAX_LEVEL) #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 #else
#define _LOG_MAX_LEVEL LOGL_INFO #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 #endif
/* Emit a log record if the level is less that the maximum */ /* Emit a log record if the level is less that the maximum */

@ -181,6 +181,19 @@ static int log_test(int testnum)
return ret; return ret;
break; 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; return 0;

@ -85,6 +85,11 @@ def test_log(u_boot_console):
lines = run_test(9) lines = run_test(9)
check_log_entries(lines, 3) 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 # TODO(sjg@chromium.org): Consider structuring this as separate tests
cons = u_boot_console cons = u_boot_console
test0() test0()
@ -97,6 +102,7 @@ def test_log(u_boot_console):
test7() test7()
test8() test8()
test9() test9()
test10()
@pytest.mark.buildconfigspec('cmd_log') @pytest.mark.buildconfigspec('cmd_log')
def test_log_format(u_boot_console): def test_log_format(u_boot_console):

Loading…
Cancel
Save