You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by we...@apache.org on 2022/06/20 20:01:20 UTC

[mynewt-core] branch master updated: sys/log: Add clearing log to log command

This is an automated email from the ASF dual-hosted git repository.

wes3 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git


The following commit(s) were added to refs/heads/master by this push:
     new a7ea0b0aa sys/log: Add clearing log to log command
a7ea0b0aa is described below

commit a7ea0b0aab1a07a36d0f863587664970d43ae254
Author: Will San Filippo <wi...@juul.com>
AuthorDate: Thu Apr 28 14:20:18 2022 -0700

    sys/log: Add clearing log to log command
    
    This commit adds the ability to clear a log, a group of logs or
    all logs using the 'log' shell command. The option -c was added
    for this purpose. The syntax is similar to the log dump syntax.
---
 sys/log/full/src/log_shell.c | 45 ++++++++++++++++++++++++++++++--------------
 1 file changed, 31 insertions(+), 14 deletions(-)

diff --git a/sys/log/full/src/log_shell.c b/sys/log/full/src/log_shell.c
index 716ae86c2..48db8a822 100644
--- a/sys/log/full/src/log_shell.c
+++ b/sys/log/full/src/log_shell.c
@@ -109,16 +109,25 @@ shell_log_dump_cmd(int argc, char **argv)
     uint32_t log_limit = 0;
     bool stream;
     bool partial_match = false;
+    bool clear_log;
     int i;
     int rc;
 
+    clear_log = false;
     for (i = 1; i < argc; ++i) {
         if (0 == strcmp(argv[i], "-l")) {
             list_only = true;
             break;
         }
-        if (isdigit((unsigned char)argv[i][0])) {
+
+        /* the -c option is to clear a log (or logs). */
+        if (!strcmp(argv[i], "-c")) {
+            clear_log = true;
+        } else if (isdigit((unsigned char)argv[i][0])) {
             log_limit = parse_ll_bounds(argv[i], 1, 1000000, &rc);
+            if (clear_log) {
+                goto err;
+            }
         } else {
             log_name = argv[i];
             if ('*' == log_name[strlen(log_name) - 1]) {
@@ -149,21 +158,29 @@ shell_log_dump_cmd(int argc, char **argv)
             continue;
         }
 
-        console_printf("Dumping log %s\n", log->l_name);
-
-        log_offset.lo_arg = NULL;
-        log_offset.lo_ts = 0;
-        log_last_index = log_get_last_index(log);
-        if (log_limit == 0 || log_last_index < log_limit) {
-            log_offset.lo_index = 0;
+        if (clear_log) {
+            console_printf("Clearing log %s\n", log->l_name);
+            rc = log_flush(log);
+            if (rc != 0) {
+                goto err;
+            }
         } else {
-            log_offset.lo_index = log_last_index - log_limit;
-        }
-        log_offset.lo_data_len = 0;
+            console_printf("Dumping log %s\n", log->l_name);
+
+            log_offset.lo_arg = NULL;
+            log_offset.lo_ts = 0;
+            log_last_index = log_get_last_index(log);
+            if (log_limit == 0 || log_last_index < log_limit) {
+                log_offset.lo_index = 0;
+            } else {
+                log_offset.lo_index = log_last_index - log_limit;
+            }
+            log_offset.lo_data_len = 0;
 
-        rc = log_walk_body(log, shell_log_dump_entry, &log_offset);
-        if (rc != 0) {
-            goto err;
+            rc = log_walk_body(log, shell_log_dump_entry, &log_offset);
+            if (rc != 0) {
+                goto err;
+            }
         }
     }