[PATCH v2 1/1] log: don't show function by default

The name of the function emitting a log message may be of interest for a developer but is distracting for normal users. See the example below:
try_load_entry() Booting: Debian
Make the default format for log messages customizable. By default show only the message text.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de --- v2: adjust logging tests adjust description of log command --- cmd/log.c | 2 +- common/Kconfig | 18 ++++++++++++++++++ include/log.h | 12 +++++++++++- test/log/syslog_test.c | 20 ++++++++++++++------ test/py/tests/test_log.py | 2 ++ 5 files changed, 46 insertions(+), 8 deletions(-)
diff --git a/cmd/log.c b/cmd/log.c index 78352b2cb9..2c91545c0d 100644 --- a/cmd/log.c +++ b/cmd/log.c @@ -139,7 +139,7 @@ static char log_help_text[] = "log format <fmt> - set log output format. <fmt> is a string where\n" "\teach letter indicates something that should be displayed:\n" "\tc=category, l=level, F=file, L=line number, f=function, m=msg\n" - "\tor 'default', equivalent to 'fm', or 'all' for all\n" + "\tor 'default', or 'all' for all\n" "log rec <category> <level> <file> <line> <func> <message> - " "output a log record" ; diff --git a/common/Kconfig b/common/Kconfig index 7872bc46cd..60cae77f20 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -792,6 +792,24 @@ config TPL_LOG_CONSOLE
endif
+config LOGF_FILE + bool "Show source file name in log messages by default" + help + Show the source file name in log messages by default. This value + can be overridden using the 'log format' command. + +config LOGF_LINE + bool "Show source line number in log messages by default" + help + Show the source line number in log messages by default. This value + can be overridden using the 'log format' command. + +config LOGF_FUNC + bool "Show function name in log messages by default" + help + Show the function name in log messages by default. This value can + be overridden using the 'log format' command. + config LOG_ERROR_RETURN bool "Log all functions which return an error" help diff --git a/include/log.h b/include/log.h index df65398c04..ec471c3a01 100644 --- a/include/log.h +++ b/include/log.h @@ -411,7 +411,17 @@ enum log_fmt { LOGF_MSG,
LOGF_COUNT, - LOGF_DEFAULT = (1 << LOGF_FUNC) | (1 << LOGF_MSG), + LOGF_DEFAULT = +#ifdef CONFIG_LOGF_FILE + (1 << LOGF_FILE) | +#endif +#ifdef CONFIG_LOGF_LINE + (1 << LOGF_LINE) | +#endif +#ifdef CONFIG_LOGF_FUNC + (1 << LOGF_FUNC) | +#endif + (1 << LOGF_MSG), LOGF_ALL = 0x3f, };
diff --git a/test/log/syslog_test.c b/test/log/syslog_test.c index 26536ebca7..d1dfd08581 100644 --- a/test/log/syslog_test.c +++ b/test/log/syslog_test.c @@ -21,6 +21,8 @@
DECLARE_GLOBAL_DATA_PTR;
+#define LOGF_TEST ((1 << LOGF_FUNC) | (1 << LOGF_MSG)) + /** * struct sb_log_env - private data for sandbox ethernet driver * @@ -102,7 +104,7 @@ static int log_test_syslog_err(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -116,6 +118,7 @@ static int log_test_syslog_err(struct unit_test_state *uts) /* Check that the callback function was called */ sandbox_eth_set_tx_handler(0, NULL); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -132,7 +135,7 @@ static int log_test_syslog_warning(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -147,6 +150,7 @@ static int log_test_syslog_warning(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -163,7 +167,7 @@ static int log_test_syslog_notice(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -178,6 +182,7 @@ static int log_test_syslog_notice(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -194,7 +199,7 @@ static int log_test_syslog_info(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -209,6 +214,7 @@ static int log_test_syslog_info(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -225,7 +231,7 @@ static int log_test_syslog_debug(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_DEBUG; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -240,6 +246,7 @@ static int log_test_syslog_debug(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -259,7 +266,7 @@ static int log_test_syslog_nodebug(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -274,6 +281,7 @@ static int log_test_syslog_nodebug(struct unit_test_state *uts) /* Check that the callback function was not called */ ut_assertnonnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } diff --git a/test/py/tests/test_log.py b/test/py/tests/test_log.py index 75325fad61..ddc28f19ee 100644 --- a/test/py/tests/test_log.py +++ b/test/py/tests/test_log.py @@ -39,6 +39,8 @@ def test_log(u_boot_console): Returns: iterator containing the lines output from the command """ + output = u_boot_console.run_command('log format fm') + assert output == '' with cons.log.section('basic'): output = u_boot_console.run_command('log test %d' % testnum) split = output.replace('\r', '').splitlines() -- 2.26.2

The name of the function emitting a log message may be of interest for a developer but is distracting for normal users. See the example below:
try_load_entry() Booting: Debian
Make the default format for log messages customizable. By default show only the message text.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de --- v2: adjust logging tests adjust description of log command --- cmd/log.c | 2 +- common/Kconfig | 18 ++++++++++++++++++ include/log.h | 12 +++++++++++- test/log/syslog_test.c | 20 ++++++++++++++------ test/py/tests/test_log.py | 2 ++ 5 files changed, 46 insertions(+), 8 deletions(-)
diff --git a/cmd/log.c b/cmd/log.c index 78352b2cb9..2c91545c0d 100644 --- a/cmd/log.c +++ b/cmd/log.c @@ -139,7 +139,7 @@ static char log_help_text[] = "log format <fmt> - set log output format. <fmt> is a string where\n" "\teach letter indicates something that should be displayed:\n" "\tc=category, l=level, F=file, L=line number, f=function, m=msg\n" - "\tor 'default', equivalent to 'fm', or 'all' for all\n" + "\tor 'default', or 'all' for all\n" "log rec <category> <level> <file> <line> <func> <message> - " "output a log record" ; diff --git a/common/Kconfig b/common/Kconfig index 7872bc46cd..60cae77f20 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -792,6 +792,24 @@ config TPL_LOG_CONSOLE
endif
+config LOGF_FILE + bool "Show source file name in log messages by default" + help + Show the source file name in log messages by default. This value + can be overridden using the 'log format' command. + +config LOGF_LINE + bool "Show source line number in log messages by default" + help + Show the source line number in log messages by default. This value + can be overridden using the 'log format' command. + +config LOGF_FUNC + bool "Show function name in log messages by default" + help + Show the function name in log messages by default. This value can + be overridden using the 'log format' command. + config LOG_ERROR_RETURN bool "Log all functions which return an error" help diff --git a/include/log.h b/include/log.h index df65398c04..ec471c3a01 100644 --- a/include/log.h +++ b/include/log.h @@ -411,7 +411,17 @@ enum log_fmt { LOGF_MSG,
LOGF_COUNT, - LOGF_DEFAULT = (1 << LOGF_FUNC) | (1 << LOGF_MSG), + LOGF_DEFAULT = +#ifdef CONFIG_LOGF_FILE + (1 << LOGF_FILE) | +#endif +#ifdef CONFIG_LOGF_LINE + (1 << LOGF_LINE) | +#endif +#ifdef CONFIG_LOGF_FUNC + (1 << LOGF_FUNC) | +#endif + (1 << LOGF_MSG), LOGF_ALL = 0x3f, };
diff --git a/test/log/syslog_test.c b/test/log/syslog_test.c index 26536ebca7..d1dfd08581 100644 --- a/test/log/syslog_test.c +++ b/test/log/syslog_test.c @@ -21,6 +21,8 @@
DECLARE_GLOBAL_DATA_PTR;
+#define LOGF_TEST ((1 << LOGF_FUNC) | (1 << LOGF_MSG)) + /** * struct sb_log_env - private data for sandbox ethernet driver * @@ -102,7 +104,7 @@ static int log_test_syslog_err(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -116,6 +118,7 @@ static int log_test_syslog_err(struct unit_test_state *uts) /* Check that the callback function was called */ sandbox_eth_set_tx_handler(0, NULL); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -132,7 +135,7 @@ static int log_test_syslog_warning(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -147,6 +150,7 @@ static int log_test_syslog_warning(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -163,7 +167,7 @@ static int log_test_syslog_notice(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -178,6 +182,7 @@ static int log_test_syslog_notice(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -194,7 +199,7 @@ static int log_test_syslog_info(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -209,6 +214,7 @@ static int log_test_syslog_info(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -225,7 +231,7 @@ static int log_test_syslog_debug(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_DEBUG; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -240,6 +246,7 @@ static int log_test_syslog_debug(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } @@ -259,7 +266,7 @@ static int log_test_syslog_nodebug(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT; + gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox"); @@ -274,6 +281,7 @@ static int log_test_syslog_nodebug(struct unit_test_state *uts) /* Check that the callback function was not called */ ut_assertnonnull(env.expected); gd->default_log_level = old_log_level; + gd->log_fmt = LOGF_DEFAULT;
return 0; } diff --git a/test/py/tests/test_log.py b/test/py/tests/test_log.py index 75325fad61..ddc28f19ee 100644 --- a/test/py/tests/test_log.py +++ b/test/py/tests/test_log.py @@ -39,6 +39,8 @@ def test_log(u_boot_console): Returns: iterator containing the lines output from the command """ + output = u_boot_console.run_command('log format fm') + assert output == '' with cons.log.section('basic'): output = u_boot_console.run_command('log test %d' % testnum) split = output.replace('\r', '').splitlines() -- 2.26.2

On 6/7/20 8:50 PM, Heinrich Schuchardt wrote:
The name of the function emitting a log message may be of interest for a developer but is distracting for normal users. See the example below:
try_load_entry() Booting: Debian
Make the default format for log messages customizable. By default show only the message text.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
Hello Simon,
thanks for accepting my other log related patches. I did not yet get any feedback for this one. I would need it before upstreaming patches for using log functions in the UEFI sub-system instead of printf().
My target is to collect log messages about the boot process on my syslog server.
Best regards
Heinrich
v2: adjust logging tests adjust description of log command
cmd/log.c | 2 +- common/Kconfig | 18 ++++++++++++++++++ include/log.h | 12 +++++++++++- test/log/syslog_test.c | 20 ++++++++++++++------ test/py/tests/test_log.py | 2 ++ 5 files changed, 46 insertions(+), 8 deletions(-)
diff --git a/cmd/log.c b/cmd/log.c index 78352b2cb9..2c91545c0d 100644 --- a/cmd/log.c +++ b/cmd/log.c @@ -139,7 +139,7 @@ static char log_help_text[] = "log format <fmt> - set log output format. <fmt> is a string where\n" "\teach letter indicates something that should be displayed:\n" "\tc=category, l=level, F=file, L=line number, f=function, m=msg\n"
- "\tor 'default', equivalent to 'fm', or 'all' for all\n"
- "\tor 'default', or 'all' for all\n" "log rec <category> <level> <file> <line> <func> <message> - " "output a log record" ;
diff --git a/common/Kconfig b/common/Kconfig index 7872bc46cd..60cae77f20 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -792,6 +792,24 @@ config TPL_LOG_CONSOLE
endif
+config LOGF_FILE
- bool "Show source file name in log messages by default"
- help
Show the source file name in log messages by default. This value
can be overridden using the 'log format' command.
+config LOGF_LINE
- bool "Show source line number in log messages by default"
- help
Show the source line number in log messages by default. This value
can be overridden using the 'log format' command.
+config LOGF_FUNC
- bool "Show function name in log messages by default"
- help
Show the function name in log messages by default. This value can
be overridden using the 'log format' command.
- config LOG_ERROR_RETURN bool "Log all functions which return an error" help
diff --git a/include/log.h b/include/log.h index df65398c04..ec471c3a01 100644 --- a/include/log.h +++ b/include/log.h @@ -411,7 +411,17 @@ enum log_fmt { LOGF_MSG,
LOGF_COUNT,
- LOGF_DEFAULT = (1 << LOGF_FUNC) | (1 << LOGF_MSG),
- LOGF_DEFAULT =
+#ifdef CONFIG_LOGF_FILE
(1 << LOGF_FILE) |
+#endif +#ifdef CONFIG_LOGF_LINE
(1 << LOGF_LINE) |
+#endif +#ifdef CONFIG_LOGF_FUNC
(1 << LOGF_FUNC) |
+#endif
LOGF_ALL = 0x3f, };(1 << LOGF_MSG),
diff --git a/test/log/syslog_test.c b/test/log/syslog_test.c index 26536ebca7..d1dfd08581 100644 --- a/test/log/syslog_test.c +++ b/test/log/syslog_test.c @@ -21,6 +21,8 @@
DECLARE_GLOBAL_DATA_PTR;
+#define LOGF_TEST ((1 << LOGF_FUNC) | (1 << LOGF_MSG))
- /**
- struct sb_log_env - private data for sandbox ethernet driver
@@ -102,7 +104,7 @@ static int log_test_syslog_err(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT;
- gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox");
@@ -116,6 +118,7 @@ static int log_test_syslog_err(struct unit_test_state *uts) /* Check that the callback function was called */ sandbox_eth_set_tx_handler(0, NULL); gd->default_log_level = old_log_level;
gd->log_fmt = LOGF_DEFAULT;
return 0; }
@@ -132,7 +135,7 @@ static int log_test_syslog_warning(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT;
- gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox");
@@ -147,6 +150,7 @@ static int log_test_syslog_warning(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level;
gd->log_fmt = LOGF_DEFAULT;
return 0; }
@@ -163,7 +167,7 @@ static int log_test_syslog_notice(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT;
- gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox");
@@ -178,6 +182,7 @@ static int log_test_syslog_notice(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level;
gd->log_fmt = LOGF_DEFAULT;
return 0; }
@@ -194,7 +199,7 @@ static int log_test_syslog_info(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT;
- gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox");
@@ -209,6 +214,7 @@ static int log_test_syslog_info(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level;
gd->log_fmt = LOGF_DEFAULT;
return 0; }
@@ -225,7 +231,7 @@ static int log_test_syslog_debug(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT;
- gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_DEBUG; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox");
@@ -240,6 +246,7 @@ static int log_test_syslog_debug(struct unit_test_state *uts) /* Check that the callback function was called */ ut_assertnull(env.expected); gd->default_log_level = old_log_level;
gd->log_fmt = LOGF_DEFAULT;
return 0; }
@@ -259,7 +266,7 @@ static int log_test_syslog_nodebug(struct unit_test_state *uts) int old_log_level = gd->default_log_level; struct sb_log_env env;
- gd->log_fmt = LOGF_DEFAULT;
- gd->log_fmt = LOGF_TEST; gd->default_log_level = LOGL_INFO; env_set("ethact", "eth@10002000"); env_set("log_hostname", "sandbox");
@@ -274,6 +281,7 @@ static int log_test_syslog_nodebug(struct unit_test_state *uts) /* Check that the callback function was not called */ ut_assertnonnull(env.expected); gd->default_log_level = old_log_level;
gd->log_fmt = LOGF_DEFAULT;
return 0; }
diff --git a/test/py/tests/test_log.py b/test/py/tests/test_log.py index 75325fad61..ddc28f19ee 100644 --- a/test/py/tests/test_log.py +++ b/test/py/tests/test_log.py @@ -39,6 +39,8 @@ def test_log(u_boot_console): Returns: iterator containing the lines output from the command """
output = u_boot_console.run_command('log format fm')
assert output == '' with cons.log.section('basic'): output = u_boot_console.run_command('log test %d' % testnum) split = output.replace('\r', '').splitlines()
-- 2.26.2

Hi Heinrich,
On Sun, 14 Jun 2020 at 04:34, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
On 6/7/20 8:50 PM, Heinrich Schuchardt wrote:
The name of the function emitting a log message may be of interest for a developer but is distracting for normal users. See the example below:
try_load_entry() Booting: Debian
Make the default format for log messages customizable. By default show only the message text.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
Hello Simon,
thanks for accepting my other log related patches. I did not yet get any feedback for this one. I would need it before upstreaming patches for using log functions in the UEFI sub-system instead of printf().
My target is to collect log messages about the boot process on my syslog server.
I think I emailed you about this one. Somehow I did not receive it by email but noticed it in patchwork. Can you please do a resend?
Regards, Simon
participants (2)
-
Heinrich Schuchardt
-
Simon Glass