diff --git a/cmd/log_mgmt/include/log_mgmt/log_mgmt.h b/cmd/log_mgmt/include/log_mgmt/log_mgmt.h
index 1ef8efc..6d046cd 100644
--- a/cmd/log_mgmt/include/log_mgmt/log_mgmt.h
+++ b/cmd/log_mgmt/include/log_mgmt/log_mgmt.h
@@ -27,6 +27,22 @@
 #include "log_mgmt_config.h"
 
 /**
+ * LOG MGMT specific error codes, 0 -> 6, 8 are same as mcumgr,
+ * 7 and 9 are different for backwards compatibility with newtmgr.
+ */
+#define LOG_MGMT_ERR_EOK        (0)                                  
+#define LOG_MGMT_ERR_EUNKNOWN   (1)                                  
+#define LOG_MGMT_ERR_ENOMEM     (2)                                  
+#define LOG_MGMT_ERR_EINVAL     (3)                                  
+#define LOG_MGMT_ERR_ETIMEOUT   (4)
+#define LOG_MGMT_ERR_ENOENT     (5)
+#define LOG_MGMT_ERR_EBADSTATE  (6)     /* Current state disallows command. */
+#define LOG_MGMT_ERR_ECORRUPT   (7)
+#define LOG_MGMT_ERR_ENOTSUP    (8)
+#define LOG_MGMT_ERR_EMSGSIZE   (9)
+#define LOG_MGMT_ERR_EPERUSER   (256)
+
+/**
  * Command IDs for log management group.
  */
 #define LOG_MGMT_ID_SHOW        0
diff --git a/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c b/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
index c59268d..596f14d 100644
--- a/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
+++ b/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
@@ -58,13 +58,13 @@
     for (i = 0; i <= index; i++) {
         tmplog = log_list_get_next(tmplog);
         if (tmplog == NULL) {
-            return MGMT_ERR_ENOENT;
+            return LOG_MGMT_ERR_ENOENT;
         }
     }
 
     return log_set_watermark(tmplog, index);
 #else
-    return MGMT_ERR_ENOTSUP;
+    return LOG_MGMT_ERR_ENOTSUP;
 #endif
 }
 
@@ -78,7 +78,7 @@
     for (i = 0; i <= idx; i++) {
         log = log_list_get_next(log);
         if (log == NULL) {
-            return MGMT_ERR_ENOENT;
+            return LOG_MGMT_ERR_ENOENT;
         }
     }
 
@@ -97,7 +97,7 @@
 
     name = LOG_MODULE_STR(idx);
     if (name == NULL) {
-        return MGMT_ERR_ENOENT;
+        return LOG_MGMT_ERR_ENOENT;
     } else {
         *out_module_name = name;
         return 0;
@@ -111,7 +111,7 @@
 
     name = LOG_LEVEL_STR(idx);
     if (name == NULL) {
-        return MGMT_ERR_ENOENT;
+        return LOG_MGMT_ERR_ENOENT;
     } else {
         *out_level_name = name;
         return 0;
@@ -189,7 +189,7 @@
         rc = log_read_body(log, dptr, mynewt_log_mgmt_walk_arg->chunk, offset,
                            read_len);
         if (rc < 0) {
-            return MGMT_ERR_EUNKNOWN;
+            return LOG_MGMT_ERR_EUNKNOWN;
         }
         rc = mynewt_log_mgmt_walk_arg->cb(&entry, mynewt_log_mgmt_walk_arg->arg);
         if (rc) {
@@ -216,7 +216,7 @@
 
     log = mynewt_log_mgmt_find_log(log_name);
     if (log == NULL) {
-        return MGMT_ERR_ENOENT;
+        return LOG_MGMT_ERR_ENOENT;
     }
 
     if (strcmp(log->l_name, log_name) == 0) {
@@ -228,7 +228,7 @@
         return log_walk_body(log, mynewt_log_mgmt_walk_cb, &offset);
     }
 
-    return MGMT_ERR_ENOENT;
+    return LOG_MGMT_ERR_ENOENT;
 }
 
 int
@@ -239,12 +239,12 @@
 
     log = mynewt_log_mgmt_find_log(log_name);
     if (log == NULL) {
-        return MGMT_ERR_ENOENT;
+        return LOG_MGMT_ERR_ENOENT;
     }
 
     rc = log_flush(log);
     if (rc != 0) {
-        return MGMT_ERR_EUNKNOWN;
+        return LOG_MGMT_ERR_EUNKNOWN;
     }
 
     return 0;
diff --git a/cmd/log_mgmt/port/zephyr/src/zephyr_log_mgmt.c b/cmd/log_mgmt/port/zephyr/src/zephyr_log_mgmt.c
index 8ddc012..23964a4 100644
--- a/cmd/log_mgmt/port/zephyr/src/zephyr_log_mgmt.c
+++ b/cmd/log_mgmt/port/zephyr/src/zephyr_log_mgmt.c
@@ -40,7 +40,7 @@
     for (i = 0; i <= idx; i++) {
         mdlog = mdlog_get_next(mdlog);
         if (mdlog == NULL) {
-            return MGMT_ERR_ENOENT;
+            return LOG_MGMT_ERR_ENOENT;
         }
     }
 
@@ -56,7 +56,7 @@
 
     name = mdlog_module_name(idx);
     if (name == NULL) {
-        return MGMT_ERR_ENOENT;
+        return LOG_MGMT_ERR_ENOENT;
     } else {
         *out_module_name = name;
         return 0;
@@ -70,7 +70,7 @@
 
     name = mdlog_level_name(idx);
     if (name == NULL) {
-        return MGMT_ERR_ENOENT;
+        return LOG_MGMT_ERR_ENOENT;
     } else {
         *out_level_name = name;
         return 0;
@@ -98,7 +98,7 @@
 
     rc = mdlog_read(log, desciptor, &ueh, 0, sizeof ueh);
     if (rc != sizeof ueh) {
-        return MGMT_ERR_EUNKNOWN;
+        return LOG_MGMT_ERR_EUNKNOWN;
     }
 
     /* If specified timestamp is nonzero, it is the primary criterion, and the
@@ -125,7 +125,7 @@
     rc = mdlog_read(log, desciptor, zephyr_log_mgmt_walk_arg->body, sizeof ueh,
                     read_len);
     if (rc < 0) {
-        return MGMT_ERR_EUNKNOWN;
+        return LOG_MGMT_ERR_EUNKNOWN;
     }
 
     entry.ts = ueh.ue_ts;
@@ -154,7 +154,7 @@
 
     mdlog = mdlog_find(log_name);
     if (mdlog == NULL) {
-        return MGMT_ERR_ENOENT;
+        return LOG_MGMT_ERR_ENOENT;
     }
 
     if (strcmp(mdlog->l_name, log_name) == 0) {
@@ -166,7 +166,7 @@
         return mdlog_walk(mdlog, zephyr_log_mgmt_walk_cb, &offset);
     }
 
-    return MGMT_ERR_ENOENT;
+    return LOG_MGMT_ERR_ENOENT;
 }
 
 int
@@ -177,12 +177,12 @@
 
     mdlog = mdlog_find(log_name);
     if (mdlog == NULL) {
-        return MGMT_ERR_ENOENT;
+        return LOG_MGMT_ERR_ENOENT;
     }
 
     rc = mdlog_flush(mdlog);
     if (rc != 0) {
-        return MGMT_ERR_EUNKNOWN;
+        return LOG_MGMT_ERR_EUNKNOWN;
     }
 
     return 0;
diff --git a/cmd/log_mgmt/src/log_mgmt.c b/cmd/log_mgmt/src/log_mgmt.c
index 7e6c715..dab534f 100644
--- a/cmd/log_mgmt/src/log_mgmt.c
+++ b/cmd/log_mgmt/src/log_mgmt.c
@@ -108,7 +108,7 @@
             err |= cbor_encode_text_stringz(&lmec->mapenc, "str");
             break;
         default:
-            return MGMT_ERR_ECORRUPT;
+            return LOG_MGMT_ERR_ECORRUPT;
         }
 #endif
         err |= cbor_encode_text_stringz(&lmec->mapenc, "ts");
@@ -180,10 +180,10 @@
    }
 
    if (err != 0) {
-       return MGMT_ERR_ENOMEM;
+       return LOG_MGMT_ERR_ENOMEM;
    }
 
-   return MGMT_ERR_EOK;
+   return LOG_MGMT_ERR_EOK;
 }
 
 static int
@@ -236,7 +236,7 @@
             }
 
             /* We want a negative error code here */
-            return -1 * MGMT_ERR_EMSGSIZE;
+            return -1 * LOG_MGMT_ERR_EUNKNOWN;
         }
         ctxt->rsp_len += entry_len;
     }
@@ -278,7 +278,7 @@
     rsp_len = cbor_encode_bytes_written(enc) +
               cbor_encode_bytes_written(&cnt_encoder);
     if (rsp_len > LOG_MGMT_MAX_RSP_LEN) {
-        rc = MGMT_ERR_EMSGSIZE;
+        rc = LOG_MGMT_ERR_EUNKNOWN;
         goto err;
     }
 
@@ -307,7 +307,7 @@
     err |= cbor_encoder_close_container(enc, &entries);
 
     if (err != 0) {
-        return MGMT_ERR_ENOMEM;
+        return LOG_MGMT_ERR_ENOMEM;
     }
 
 err:
@@ -342,7 +342,7 @@
     err |= cbor_encoder_close_container(ctxt, &logs);
 
     if (err != 0) {
-        return MGMT_ERR_ENOMEM;
+        return LOG_MGMT_ERR_ENOMEM;
     }
 
     return 0;
@@ -392,7 +392,7 @@
     name[0] = '\0';
     rc = cbor_read_object(&ctxt->it, attr);
     if (rc != 0) {
-        return MGMT_ERR_EINVAL;
+        return LOG_MGMT_ERR_EINVAL;
     }
     name_len = strlen(name);
 
@@ -401,7 +401,7 @@
     /* Determine the index that the next log entry would use. */
     rc = log_mgmt_impl_get_next_idx(&next_idx);
     if (rc != 0) {
-        return MGMT_ERR_EUNKNOWN;
+        return LOG_MGMT_ERR_EUNKNOWN;
     }
 
     err |= cbor_encode_text_stringz(&ctxt->encoder, "next_index");
@@ -415,12 +415,12 @@
     /* Iterate list of logs, encoding each that matches the client request. */
     for (log_idx = 0; ; log_idx++) {
         rc = log_mgmt_impl_get_log(log_idx, &log);
-        if (rc == MGMT_ERR_ENOENT) {
+        if (rc == LOG_MGMT_ERR_ENOENT) {
             /* Log list fully iterated. */
             if (name_len != 0) {
                 /* Client specified log name, but the log wasn't found. */
                 cbor_encoder_close_container(&ctxt->encoder, &logs);
-                return MGMT_ERR_ENOENT;
+                return LOG_MGMT_ERR_ENOENT;
             } else {
                 break;
             }
@@ -434,7 +434,7 @@
                 rc = log_encode(&log, &logs, timestamp, index);
 
 #if LOG_MGMT_READ_WATERMARK_UPDATE
-                if (rc == 0 || rc == MGMT_ERR_EMSGSIZE) {
+                if (rc == 0 || rc == LOG_MGMT_ERR_EUNKNOWN) {
                     log_mgmt_impl_set_watermark(&log, index);
                 }
 #endif
@@ -461,7 +461,7 @@
     err |= cbor_encode_int(&ctxt->encoder, rc);
 
     if (err != 0) {
-        return MGMT_ERR_ENOMEM;
+        return LOG_MGMT_ERR_ENOMEM;
     }
 
     return 0;
@@ -481,14 +481,14 @@
 
     err = 0;
     err |= cbor_encode_text_stringz(&ctxt->encoder, "rc");
-    err |= cbor_encode_int(&ctxt->encoder, MGMT_ERR_EOK);
+    err |= cbor_encode_int(&ctxt->encoder, LOG_MGMT_ERR_EOK);
     err |= cbor_encode_text_stringz(&ctxt->encoder, "module_map");
     err |= cbor_encoder_create_map(&ctxt->encoder, &modules,
                                    CborIndefiniteLength);
 
     for (module = 0; ; module++) {
         rc = log_mgmt_impl_get_module(module, &module_name);
-        if (rc == MGMT_ERR_ENOENT) {
+        if (rc == LOG_MGMT_ERR_ENOENT) {
             break;
         }
         if (rc != 0) {
@@ -505,7 +505,7 @@
     err |= cbor_encoder_close_container(&ctxt->encoder, &modules);
 
     if (err != 0) {
-        return MGMT_ERR_ENOMEM;
+        return LOG_MGMT_ERR_ENOMEM;
     }
 
     return 0;
@@ -525,14 +525,14 @@
 
     err = 0;
     err |= cbor_encode_text_stringz(&ctxt->encoder, "rc");
-    err |= cbor_encode_int(&ctxt->encoder, MGMT_ERR_EOK);
+    err |= cbor_encode_int(&ctxt->encoder, LOG_MGMT_ERR_EOK);
     err |= cbor_encode_text_stringz(&ctxt->encoder, "log_list");
     err |= cbor_encoder_create_array(&ctxt->encoder, &log_list,
                                      CborIndefiniteLength);
 
     for (log_idx = 0; ; log_idx++) {
         rc = log_mgmt_impl_get_log(log_idx, &log);
-        if (rc == MGMT_ERR_ENOENT) {
+        if (rc == LOG_MGMT_ERR_ENOENT) {
             break;
         }
         if (rc != 0) {
@@ -548,7 +548,7 @@
     err |= cbor_encoder_close_container(&ctxt->encoder, &log_list);
 
     if (err != 0) {
-        return MGMT_ERR_ENOMEM;
+        return LOG_MGMT_ERR_ENOMEM;
     }
 
     return 0;
@@ -568,14 +568,14 @@
 
     err = 0;
     err |= cbor_encode_text_stringz(&ctxt->encoder, "rc");
-    err |= cbor_encode_int(&ctxt->encoder, MGMT_ERR_EOK);
+    err |= cbor_encode_int(&ctxt->encoder, LOG_MGMT_ERR_EOK);
     err |= cbor_encode_text_stringz(&ctxt->encoder, "level_map");
     err |= cbor_encoder_create_map(&ctxt->encoder, &level_map,
                                    CborIndefiniteLength);
 
     for (level = 0; ; level++) {
         rc = log_mgmt_impl_get_level(level, &level_name);
-        if (rc == MGMT_ERR_ENOENT) {
+        if (rc == LOG_MGMT_ERR_ENOENT) {
             break;
         }
         if (rc != 0) {
@@ -592,7 +592,7 @@
     err |= cbor_encoder_close_container(&ctxt->encoder, &level_map);
 
     if (err != 0) {
-        return MGMT_ERR_ENOMEM;
+        return LOG_MGMT_ERR_ENOMEM;
     }
 
     return 0;
@@ -625,13 +625,13 @@
     name[0] = '\0';
     rc = cbor_read_object(&ctxt->it, attr);
     if (rc != 0) {
-        return MGMT_ERR_EINVAL;
+        return LOG_MGMT_ERR_EINVAL;
     }
     name_len = strlen(name);
 
     for (log_idx = 0; ; log_idx++) {
         rc = log_mgmt_impl_get_log(log_idx, &log);
-        if (rc == MGMT_ERR_ENOENT) {
+        if (rc == LOG_MGMT_ERR_ENOENT) {
             return 0;
         }
         if (rc != 0) {
@@ -653,7 +653,7 @@
     }
 
     if (name_len != 0) {
-        return MGMT_ERR_ENOENT;
+        return LOG_MGMT_ERR_ENOENT;
     }
 
     return 0;
