diff mbox series

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

Message ID 20200607185048.5073-1-xypron.glpk@gmx.de
State Superseded
Headers show
Series [RESEND,v2,1/1] log: don't show function by default | expand

Commit Message

Heinrich Schuchardt June 7, 2020, 6:50 p.m. UTC
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 at 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(-)

--
2.26.2

Comments

Heinrich Schuchardt June 14, 2020, 10:34 a.m. UTC | #1
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 at 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
> +		(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 at 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 at 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 at 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 at 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 at 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 at 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
>
Simon Glass June 14, 2020, 1:37 p.m. UTC | #2
Hi Heinrich,

On Sun, 14 Jun 2020 at 04:34, Heinrich Schuchardt <xypron.glpk at 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 at 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
diff mbox series

Patch

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 at 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 at 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 at 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 at 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 at 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 at 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()