diff --git a/git_superproject.py b/git_superproject.py
index 8769355..c677924 100644
--- a/git_superproject.py
+++ b/git_superproject.py
@@ -122,11 +122,19 @@
       branch = branch[len(R_HEADS):]
     return branch
 
-  def _LogError(self, message):
+  def _LogMessage(self, message):
     """Logs message to stderr and _git_event_log."""
     print(message, file=sys.stderr)
     self._git_event_log.ErrorEvent(message, '')
 
+  def _LogError(self, message):
+    """Logs error message to stderr and _git_event_log."""
+    self._LogMessage(f'repo superproject error: {message}')
+
+  def _LogWarning(self, message):
+    """Logs warning message to stderr and _git_event_log."""
+    self._LogMessage(f'repo superproject warning: {message}')
+
   def _Init(self):
     """Sets up a local Git repository to get a copy of a superproject.
 
@@ -146,8 +154,8 @@
                    capture_stderr=True)
     retval = p.Wait()
     if retval:
-      self._LogError(f'repo: error: git init call failed, command: git {cmd}, '
-                     f'return code: {retval}, stderr: {p.stderr}')
+      self._LogWarning(f'git init call failed, command: git {cmd}, '
+                       f'return code: {retval}, stderr: {p.stderr}')
       return False
     return True
 
@@ -161,7 +169,7 @@
       True if fetch is successful, or False.
     """
     if not os.path.exists(self._work_git):
-      self._LogError(f'git fetch missing directory: {self._work_git}')
+      self._LogWarning(f'git fetch missing directory: {self._work_git}')
       return False
     if not git_require((2, 28, 0)):
       print('superproject requires a git version 2.28 or later', file=sys.stderr)
@@ -176,8 +184,8 @@
                    capture_stderr=True)
     retval = p.Wait()
     if retval:
-      self._LogError(f'repo: error: git fetch call failed, command: git {cmd}, '
-                     f'return code: {retval}, stderr: {p.stderr}')
+      self._LogWarning(f'git fetch call failed, command: git {cmd}, '
+                       f'return code: {retval}, stderr: {p.stderr}')
       return False
     return True
 
@@ -190,7 +198,7 @@
       data: data returned from 'git ls-tree ...' instead of None.
     """
     if not os.path.exists(self._work_git):
-      self._LogError(f'git ls-tree missing directory: {self._work_git}')
+      self._LogWarning(f'git ls-tree missing directory: {self._work_git}')
       return None
     data = None
     branch = 'HEAD' if not self._branch else self._branch
@@ -205,8 +213,8 @@
     if retval == 0:
       data = p.stdout
     else:
-      self._LogError(f'repo: error: git ls-tree call failed, command: git {cmd}, '
-                     f'return code: {retval}, stderr: {p.stderr}')
+      self._LogWarning(f'git ls-tree call failed, command: git {cmd}, '
+                       f'return code: {retval}, stderr: {p.stderr}')
     return data
 
   def Sync(self):
@@ -219,15 +227,15 @@
           'address described in `repo version`', file=sys.stderr)
 
     if not self._manifest.superproject:
-      self._LogError(f'repo error: superproject tag is not defined in manifest: '
-                     f'{self._manifest.manifestFile}')
+      self._LogWarning(f'superproject tag is not defined in manifest: '
+                       f'{self._manifest.manifestFile}')
       return SyncResult(False, False)
 
     should_exit = True
     url = self._manifest.superproject['remote'].url
     if not url:
-      self._LogError(f'repo error: superproject URL is not defined in manifest: '
-                     f'{self._manifest.manifestFile}')
+      self._LogWarning(f'superproject URL is not defined in manifest: '
+                       f'{self._manifest.manifestFile}')
       return SyncResult(False, should_exit)
 
     if not self._Init():
@@ -277,7 +285,7 @@
       manifest_path: Path name of the file into which manifest is written instead of None.
     """
     if not os.path.exists(self._superproject_path):
-      self._LogError(f'error: missing superproject directory: {self._superproject_path}')
+      self._LogWarning(f'missing superproject directory: {self._superproject_path}')
       return None
     manifest_str = self._manifest.ToXml(groups=self._manifest.GetGroupsStr()).toxml()
     manifest_path = self._manifest_path
@@ -285,7 +293,7 @@
       with open(manifest_path, 'w', encoding='utf-8') as fp:
         fp.write(manifest_str)
     except IOError as e:
-      self._LogError(f'error: cannot write manifest to : {manifest_path} {e}')
+      self._LogError(f'cannot write manifest to : {manifest_path} {e}')
       return None
     return manifest_path
 
@@ -336,8 +344,8 @@
     # If superproject doesn't have a commit id for a project, then report an
     # error event and continue as if do not use superproject is specified.
     if projects_missing_commit_ids:
-      self._LogError(f'error: please file a bug using {self._manifest.contactinfo.bugurl} '
-                     f'to report missing commit_ids for: {projects_missing_commit_ids}')
+      self._LogWarning(f'please file a bug using {self._manifest.contactinfo.bugurl} '
+                       f'to report missing commit_ids for: {projects_missing_commit_ids}')
       return UpdateProjectsResult(None, False)
 
     for project in projects:
diff --git a/tests/fixtures/test.gitconfig b/tests/fixtures/test.gitconfig
index d71f8e7..d69e162 100644
--- a/tests/fixtures/test.gitconfig
+++ b/tests/fixtures/test.gitconfig
@@ -12,10 +12,10 @@
 	intm = 10m
 	intg = 10g
 [repo "syncstate.main"]
-	synctime = 2021-07-29T22:07:43.463365Z
+	synctime = 2021-08-11T17:54:14.530286Z
 	version = 1
 [repo "syncstate.sys"]
-	argv = ['/usr/bin/pytest-3']
+	argv = ['/usr/bin/pytest-3', '-v']
 [repo "syncstate.superproject"]
 	test = false
 [repo "syncstate.options"]
