]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Fix auto-debug logging of job errors with systemd (Issue #5337)
authorMichael R Sweet <michael.r.sweet@gmail.com>
Tue, 19 Jun 2018 01:46:21 +0000 (21:46 -0400)
committerMichael R Sweet <michael.r.sweet@gmail.com>
Tue, 19 Jun 2018 01:46:21 +0000 (21:46 -0400)
CHANGES.md
scheduler/log.c

index 4a31b860dd8089c1ee460d1cea0b3d435dd3e18d..96e5ad854fc54b7d13ebd727925ecaf1c39a80ff 100644 (file)
@@ -13,6 +13,7 @@ Changes in CUPS v2.3b6
 - Fixed a regression in the changes to ippValidateAttribute (Issue #5322,
   Issue #5330)
 - Fixed a crash bug in the Epson dot matrix driver (Issue #5323)
+- Automatic debug logging of job errors did not work with systemd (Issue #5337)
 - The web interface did not list the IPP Everywhere "driver" (Issue #5338)
 - The scheduler did not report all of the supported job options and values
   (Issue #5340)
index b6226201f7dc5b9caea0d42e31988b818d9f2369..cdb5437dcf712ace4d0cdcd203bbfef5af4924b6 100644 (file)
@@ -565,56 +565,15 @@ cupsdLogJob(cupsd_job_t *job,             /* I - Job */
   if (level > LogLevel && LogDebugHistory <= 0)
     return (1);
 
-#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
-  if (!strcmp(ErrorLog, "syslog"))
-  {
-    cupsd_printer_t *printer = job ? (job->printer ? job->printer : (job->dest ? cupsdFindDest(job->dest) : NULL)) : NULL;
-    static const char * const job_states[] =
-    {                                  /* job-state strings */
-      "Pending",
-      "PendingHeld",
-      "Processing",
-      "ProcessingStopped",
-      "Canceled",
-      "Aborted",
-      "Completed"
-    };
-
-    va_start(ap, message);
-
-    do
-    {
-      va_copy(ap2, ap);
-      status = format_log_line(message, ap2);
-      va_end(ap2);
-    }
-    while (status == 0);
-
-    va_end(ap);
-
-    if (job)
-      sd_journal_send("MESSAGE=%s", log_line,
-                     "PRIORITY=%i", log_levels[level],
-                     PWG_Event"=JobStateChanged",
-                     PWG_ServiceURI"=%s", printer ? printer->uri : "",
-                     PWG_JobID"=%d", job->id,
-                     PWG_JobState"=%s", job->state_value < IPP_JSTATE_PENDING ? "" : job_states[job->state_value - IPP_JSTATE_PENDING],
-                     PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
-                     NULL);
-    else
-      sd_journal_send("MESSAGE=%s", log_line,
-                     "PRIORITY=%i", log_levels[level],
-                     NULL);
-
-    return (1);
-  }
-#endif /* HAVE_SYSTEMD_SD_JOURNAL_H */
-
  /*
   * Format and write the log message...
   */
 
+#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
+  if (job && strcmp(ErrorLog, "syslog"))
+#else
   if (job)
+#endif /* HAVE_SYSTEMD_SD_JOURNAL_H */
     snprintf(jobmsg, sizeof(jobmsg), "[Job %d] %s", job->id, message);
   else
     strlcpy(jobmsg, message, sizeof(jobmsg));
@@ -673,7 +632,43 @@ cupsdLogJob(cupsd_job_t *job,              /* I - Job */
       return (1);
     }
     else if (level <= LogLevel)
+    {
+#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
+      if (!strcmp(ErrorLog, "syslog"))
+      {
+       cupsd_printer_t *printer = job ? (job->printer ? job->printer : (job->dest ? cupsdFindDest(job->dest) : NULL)) : NULL;
+       static const char * const job_states[] =
+       {                                       /* job-state strings */
+         "Pending",
+         "PendingHeld",
+         "Processing",
+         "ProcessingStopped",
+         "Canceled",
+         "Aborted",
+         "Completed"
+       };
+
+       if (job)
+         sd_journal_send("MESSAGE=%s", log_line,
+                         "PRIORITY=%i", log_levels[level],
+                         PWG_Event"=JobStateChanged",
+                         PWG_ServiceURI"=%s", printer ? printer->uri : "",
+                         PWG_JobID"=%d", job->id,
+                         PWG_JobState"=%s", job->state_value < IPP_JSTATE_PENDING ? "" : job_states[job->state_value - IPP_JSTATE_PENDING],
+                         PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
+                         NULL);
+       else
+         sd_journal_send("MESSAGE=%s", log_line,
+                         "PRIORITY=%i", log_levels[level],
+                         NULL);
+
+       return (1);
+      }
+      else
+#endif /* HAVE_SYSTEMD_SD_JOURNAL_H */
+
       return (cupsdWriteErrorLog(level, log_line));
+    }
     else
       return (1);
   }