diff --git a/scripts/imgtool/image.py b/scripts/imgtool/image.py
index d57b5ba..dea34b4 100644
--- a/scripts/imgtool/image.py
+++ b/scripts/imgtool/image.py
@@ -315,7 +315,7 @@
             pubbytes = sha.digest()
         elif pub_key is not None:
             if hasattr(pub_key, 'sign'):
-                print("sign the payload")
+                print(os.path.basename(__file__) + ": sign the payload")
             pub = pub_key.get_public_bytes()
             sha = hashlib.sha256()
             sha.update(pub)
@@ -443,11 +443,11 @@
             if vector_to_sign == 'payload':
                 # Stop amending data to the image
                 # Just keep data vector which is expected to be sigend
-                print('export payload')
+                print(os.path.basename(__file__) + ': export payload')
                 return
             elif vector_to_sign == 'digest':
                 self.payload = digest
-                print('export digest')
+                print(os.path.basename(__file__) + ': export digest')
                 return
 
             if key is not None and fixed_sig is None:
@@ -455,10 +455,10 @@
                 # while `sign_digest` expects only the digest of the payload
 
                 if hasattr(key, 'sign'):
-                    print("sign the payload")
+                    print(os.path.basename(__file__) + ": sign the payload")
                     sig = key.sign(bytes(self.payload))
                 else:
-                    print("sign the digest")
+                    print(os.path.basename(__file__) + ": sign the digest")
                     sig = key.sign_digest(digest)
                 tlv.add(key.sig_tlv(), sig)
                 self.signature = sig
