diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 6da647e369da61a48289e94899f209c1983ea2f9..d446e974a7466d9707b27e0ad27a4e1ea1534c1e 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -1,3 +1,5 @@
+- cta/CTA#964 Adds failure log messages to processCLOSEW in CTA Frontend
+
 # v3.2-1
 
 ## Summary
diff --git a/xroot_plugins/XrdSsiCtaRequestMessage.cpp b/xroot_plugins/XrdSsiCtaRequestMessage.cpp
index f56eb2d29877a7c7be87915ca7cb09e890657118..037636953712cb084e22f9a14a4f07bcfc5e4ace 100644
--- a/xroot_plugins/XrdSsiCtaRequestMessage.cpp
+++ b/xroot_plugins/XrdSsiCtaRequestMessage.cpp
@@ -504,23 +504,31 @@ void RequestMessage::processCLOSEW(const cta::eos::Notification &notification, c
    request.creationLog.username   = m_cliIdentity.username;
    request.creationLog.time       = time(nullptr);
 
+   cta::log::ScopedParamContainer params(m_lc);
+   params.add("requesterInstance", notification.wf().requester_instance());
+   std::string logMessage = "In RequestMessage::processCLOSEW(): ";
+
    // CTA Archive ID is an EOS extended attribute, i.e. it is stored as a string, which
    // must be converted to a valid uint64_t
    const auto archiveFileIdItor = notification.file().xattr().find("sys.archive.file_id");
    if(notification.file().xattr().end() == archiveFileIdItor) {
+     logMessage += "sys.archive.file_id is not present in extended attributes";
+     m_lc.log(cta::log::INFO, logMessage);
      throw PbException(std::string(__FUNCTION__) + ": Failed to find the extended attribute named sys.archive.file_id");
    }
    const std::string archiveFileIdStr = archiveFileIdItor->second;
    uint64_t archiveFileId = 0;
    if((archiveFileId = strtoul(archiveFileIdStr.c_str(), nullptr, 10)) == 0)
    {
+      params.add("sys.archive.file_id", archiveFileIdStr);
+      logMessage += "sys.archive.file_id is not a positive integer";
+      m_lc.log(cta::log::INFO, logMessage);
       throw PbException("Invalid archiveFileID " + archiveFileIdStr);
    }
+   params.add("fileId", archiveFileId);
 
    cta::utils::Timer t;
 
-   cta::log::ScopedParamContainer params(m_lc);
-   std::string logMessage = "In RequestMessage::processCLOSEW(): ";
    if(request.fileSize > 0) {
      // Queue the request
      std::string archiveRequestAddr = m_scheduler.queueArchiveWithGivenId(archiveFileId, m_cliIdentity.username, request, m_lc);
@@ -535,8 +543,6 @@ void RequestMessage::processCLOSEW(const cta::eos::Notification &notification, c
    }
 
    // Create a log entry
-   params.add("fileId", archiveFileId);
-   params.add("requesterInstance", notification.wf().requester_instance());
    m_lc.log(cta::log::INFO, logMessage);
 
    // Set response type