diff -up cups-1.7.1/config.h.in.journal cups-1.7.1/config.h.in
--- cups-1.7.1/config.h.in.journal 2014-02-17 16:48:19.089795987 +0000
+++ cups-1.7.1/config.h.in 2014-02-17 16:48:19.136796218 +0000
@@ -458,6 +458,13 @@
/*
+ * Do we have systemd-journal support?
+ */
+
+#undef HAVE_JOURNAL
+
+
+/*
* Various scripting languages...
*/
diff -up cups-1.7.1/config-scripts/cups-systemd.m4.journal cups-1.7.1/config-scripts/cups-systemd.m4
--- cups-1.7.1/config-scripts/cups-systemd.m4.journal 2014-02-17 16:48:19.089795987 +0000
+++ cups-1.7.1/config-scripts/cups-systemd.m4 2014-02-17 16:48:19.136796218 +0000
@@ -22,6 +22,15 @@ if test "x$with_systemdsystemunitdir" !=
fi
fi
+SDJLIBS=""
+AC_MSG_CHECKING(for libsystemd-journal)
+if $PKGCONFIG --exists libsystemd-journal; then
+ AC_MSG_RESULT(yes)
+ SDJLIBS=`$PKGCONFIG --libs libsystemd-journal`
+ AC_DEFINE(HAVE_JOURNAL)
+else
+ AC_MSG_RESULT(no)
+fi
if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ; then
SYSTEMD_UNITS="cups.service cups.socket cups.path"
else
@@ -30,6 +39,7 @@ fi
AC_SUBST(SYSTEMD_UNITS)
AC_SUBST(SDLIBS)
+AC_SUBST(SDJLIBS)
dnl
dnl "$Id$"
diff -up cups-1.7.1/doc/help/ref-cups-files-conf.html.in.journal cups-1.7.1/doc/help/ref-cups-files-conf.html.in
--- cups-1.7.1/doc/help/ref-cups-files-conf.html.in.journal 2014-02-17 17:06:11.652078495 +0000
+++ cups-1.7.1/doc/help/ref-cups-files-conf.html.in 2014-02-17 17:11:50.675752398 +0000
@@ -18,6 +18,7 @@
AccessLog /var/log/cups/access_log
AccessLog /var/log/cups/access_log-%s
AccessLog syslog
+AccessLog journal
Description
@@ -36,6 +37,9 @@ server activity.
The special name "syslog" can be used to send the access
information to the system log instead of a plain file.
+The special name "journal" can be used to send the access
+information to the system log instead of a plain file.
+
The default access log file is
/var/log/access_log.
@@ -108,6 +112,7 @@ language needed.
ErrorLog /var/log/cups/error_log
ErrorLog /var/log/cups/error_log-%s
ErrorLog syslog
+ErrorLog journal
Description
@@ -124,6 +129,11 @@ default error log file is /var/log/
The special name "syslog" can be used to send the error
information to the system log instead of a plain file.
+The special name "journal" can be used to send the error
+information to the system journal instead of a plain file. Information
+relating to a specific job is logged with the field
+CUPS_JOB_ID
filled in.
+
@@ -266,6 +276,7 @@ is 644.
PageLog /var/log/cups/page_log
PageLog /var/log/cups/page_log-%s
PageLog syslog
+PageLog journal
Description
@@ -282,6 +293,11 @@ default page log file is /var/log/c
The special name "syslog" can be used to send the page
information to the system log instead of a plain file.
+The special name "journal" can be used to send the page information
+to the system journal instead of a plain file. The fields
+CUPS_JOB_ID
and CUPS_PAGE_NUMBER
will be
+filled in.
+
diff -up cups-1.7.1/Makedefs.in.journal cups-1.7.1/Makedefs.in
--- cups-1.7.1/Makedefs.in.journal 2014-02-17 16:48:19.090795992 +0000
+++ cups-1.7.1/Makedefs.in 2014-02-17 16:48:19.136796218 +0000
@@ -143,6 +143,7 @@ IPPFIND_BIN = @IPPFIND_BIN@
IPPFIND_MAN = @IPPFIND_MAN@
LAUNCHDLIBS = @LAUNCHDLIBS@
SDLIBS = @SDLIBS@
+SDJLIBS = @SDJLIBS@
LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \
-L../scheduler @LDARCHFLAGS@ \
@LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM)
diff -up cups-1.7.1/man/cups-files.conf.man.in.journal cups-1.7.1/man/cups-files.conf.man.in
--- cups-1.7.1/man/cups-files.conf.man.in.journal 2014-02-17 17:05:08.103764935 +0000
+++ cups-1.7.1/man/cups-files.conf.man.in 2014-02-17 17:06:48.131258521 +0000
@@ -29,6 +29,8 @@ on-line help for detailed descriptions:
AccessLog filename
.TP 5
AccessLog syslog
+.TP 5
+AccessLog journal
.br
Defines the access log filename.
.TP 5
@@ -48,6 +50,8 @@ Specifies the root directory for the int
ErrorLog filename
.TP 5
ErrorLog syslog
+.TP 5
+ErrorLog journal
.br
Specifies the error log filename.
.TP 5
@@ -83,6 +87,8 @@ Specifies the permissions for all log fi
PageLog filename
.TP 5
PageLog syslog
+.TP 5
+PageLog journal
.br
Specifies the page log filename.
.TP 5
diff -up cups-1.7.1/scheduler/conf.c.journal cups-1.7.1/scheduler/conf.c
--- cups-1.7.1/scheduler/conf.c.journal 2014-02-17 16:48:19.047795781 +0000
+++ cups-1.7.1/scheduler/conf.c 2014-02-17 16:48:19.137796223 +0000
@@ -950,9 +950,9 @@ cupsdReadConfiguration(void)
*/
#ifdef HAVE_VSYSLOG
- if (!strcmp(AccessLog, "syslog") ||
- !strcmp(ErrorLog, "syslog") ||
- !strcmp(PageLog, "syslog"))
+ if (!strcmp(AccessLog, "syslog") || !strcmp(AccessLog, "journal") ||
+ !strcmp(ErrorLog, "syslog") || !strcmp(ErrorLog, "journal") ||
+ !strcmp(PageLog, "syslog") || !strcmp(PageLog, "journal"))
openlog("cupsd", LOG_PID | LOG_NOWAIT | LOG_NDELAY, LOG_LPR);
#endif /* HAVE_VSYSLOG */
@@ -960,13 +960,13 @@ cupsdReadConfiguration(void)
* Make sure each of the log files exists and gets rotated as necessary...
*/
- if (strcmp(AccessLog, "syslog"))
+ if (strcmp(AccessLog, "syslog") && strcmp(AccessLog, "journal"))
cupsdCheckLogFile(&AccessFile, AccessLog);
- if (strcmp(ErrorLog, "syslog"))
+ if (strcmp(ErrorLog, "syslog") && strcmp(ErrorLog, "journal"))
cupsdCheckLogFile(&ErrorFile, ErrorLog);
- if (strcmp(PageLog, "syslog"))
+ if (strcmp(PageLog, "syslog") && strcmp(PageLog, "journal"))
cupsdCheckLogFile(&PageFile, PageLog);
/*
diff -up cups-1.7.1/scheduler/conf.h.journal cups-1.7.1/scheduler/conf.h
--- cups-1.7.1/scheduler/conf.h.journal 2014-02-17 16:48:19.048795786 +0000
+++ cups-1.7.1/scheduler/conf.h 2014-02-17 16:48:19.138796228 +0000
@@ -297,6 +297,8 @@ extern int cupsdLogMessage(int level, co
extern int cupsdLogPage(cupsd_job_t *job, const char *page);
extern int cupsdLogRequest(cupsd_client_t *con, http_status_t code);
extern int cupsdReadConfiguration(void);
+extern int cupsdWriteErrorLogJob(cupsd_job_t *job, int level,
+ const char *message);
extern int cupsdWriteErrorLog(int level, const char *message);
diff -up cups-1.7.1/scheduler/log.c.journal cups-1.7.1/scheduler/log.c
--- cups-1.7.1/scheduler/log.c.journal 2014-02-17 16:48:19.073795909 +0000
+++ cups-1.7.1/scheduler/log.c 2014-02-17 16:48:19.138796228 +0000
@@ -21,6 +21,7 @@
* cupsdLogMessage() - Log a message to the error log file.
* cupsdLogPage() - Log a page to the page log file.
* cupsdLogRequest() - Log an HTTP request in Common Log Format.
+ * cupsdWriteErrorLogJob() - Write a job message to the ErrorLog.
* cupsdWriteErrorLog() - Write a line to the ErrorLog.
* format_log_line() - Format a line for a log file.
*/
@@ -35,6 +36,9 @@
#include
#include
#include
+#ifdef HAVE_JOURNAL
+# include
+#endif /* HAVE_JOURNAL */
/*
@@ -559,8 +563,17 @@ cupsdLogJob(cupsd_job_t *job, /* I - Jo
}
else if (level <= LogLevel &&
(level != CUPSD_LOG_INFO || LogLevel >= CUPSD_LOG_DEBUG))
- return (cupsdWriteErrorLog(level, log_line));
- else
+ {
+ if (!strcmp (ErrorLog, "journal"))
+#ifdef HAVE_JOURNAL
+ return (sd_journal_send ("MESSAGE=%s", log_line,
+ "PRIORITY=%d", syslevels[level],
+ "CUPS_JOB_ID=%d", job ? job->id : -1,
+ NULL)) ? 0 : 1;
+ else
+#endif /* HAVE_JOURNAL */
+ return (cupsdWriteErrorLog(level, log_line));
+ } else
return (1);
}
else
@@ -789,6 +802,15 @@ cupsdLogPage(cupsd_job_t *job, /* I - J
*bufptr = '\0';
+#ifdef HAVE_JOURNAL
+ if (!strcmp(PageLog, "journal"))
+ return (sd_journal_send ("MESSAGE=%s", buffer,
+ "PRIORITY=%d", LOG_INFO,
+ "CUPS_JOB_ID=%d", job->id,
+ "CUPS_PAGE_NUMBER=%s", number,
+ NULL) ? 0 : 1);
+#endif /* HAVE_JOURNAL */
+
#ifdef HAVE_VSYSLOG
/*
* See if we are logging pages via syslog...
@@ -964,7 +986,7 @@ cupsdLogRequest(cupsd_client_t *con, /*
* See if we are logging accesses via syslog...
*/
- if (!strcmp(AccessLog, "syslog"))
+ if (!strcmp(AccessLog, "syslog") || !strcmp(AccessLog, "journal"))
{
syslog(LOG_INFO,
"REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s\n",
@@ -1018,8 +1040,9 @@ cupsdLogRequest(cupsd_client_t *con, /*
*/
int /* O - 1 on success, 0 on failure */
-cupsdWriteErrorLog(int level, /* I - Log level */
- const char *message) /* I - Message string */
+cupsdWriteErrorLogJob(cupsd_job_t *job, /* I - Job or NULL */
+ int level, /* I - Log level */
+ const char *message) /* I - Message string */
{
static const char levels[] = /* Log levels... */
{
@@ -1036,12 +1059,25 @@ cupsdWriteErrorLog(int level, /*
};
+#ifdef HAVE_JOURNAL
+ if (!strcmp(ErrorLog, "journal"))
+ {
+ if (job)
+ {
+ return (sd_journal_send ("MESSAGE=%s", message,
+ "PRIORITY=%d", syslevels[level],
+ "CUPS_JOB_ID=%d", job->id,
+ NULL) ? 0 : 1);
+ } else
+ return (sd_journal_print (syslevels[level], "%s", message) ? 0 : 1);
+ }
+#endif /* HAVE_JOURNAL */
#ifdef HAVE_VSYSLOG
/*
* See if we are logging errors via syslog...
*/
- if (!strcmp(ErrorLog, "syslog"))
+ if (!strcmp(ErrorLog, "syslog") || !strcmp(ErrorLog, "journal"))
{
syslog(syslevels[level], "%s", message);
return (1);
@@ -1067,6 +1103,18 @@ cupsdWriteErrorLog(int level, /*
}
+/*
+ * 'cupsdWriteErrorLog()' - Write a line to the ErrorLog.
+ */
+
+int /* O - 1 on success, 0 on failure */
+cupsdWriteErrorLog(int level, /* I - Log level */
+ const char *message) /* I - Message string */
+{
+ return (cupsdWriteErrorLogJob(NULL, level, message));
+}
+
+
/*
* 'format_log_line()' - Format a line for a log file.
*
diff -up cups-1.7.1/scheduler/Makefile.journal cups-1.7.1/scheduler/Makefile
--- cups-1.7.1/scheduler/Makefile.journal 2014-02-17 16:48:19.124796159 +0000
+++ cups-1.7.1/scheduler/Makefile 2014-02-17 16:48:19.137796223 +0000
@@ -383,7 +383,7 @@ cupsd: $(CUPSDOBJS) $(LIBCUPSMIME) ../cu
$(CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \
$(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
$(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBS) \
- $(LIBGSSAPI) $(LIBWRAP) $(SDLIBS)
+ $(LIBGSSAPI) $(LIBWRAP) $(SDLIBS) $(SDJLIBS)
cupsd-static: $(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC)
echo Linking $@...
@@ -391,7 +391,7 @@ cupsd-static: $(CUPSDOBJS) libcupsmime.a
$(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \
$(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBGSSAPI) \
- $(LIBWRAP) $(SDLIBS)
+ $(LIBWRAP) $(SDLIBS) $(SDJLIBS)
tls.o: tls-darwin.c tls-gnutls.c tls-openssl.c
--- cups-1.7.1/conf/cups-files.conf.in.journal 2014-04-04 13:12:13.923185140 +0100
+++ cups-1.7.1/conf/cups-files.conf.in 2014-04-04 13:13:10.633430876 +0100
@@ -30,9 +30,10 @@ SystemGroup @CUPS_SYSTEM_GROUPS@
#ConfigFilePerm 0@CUPS_CONFIG_FILE_PERM@
#LogFilePerm 0@CUPS_LOG_FILE_PERM@
-# Location of the file logging all access to the scheduler; may be the name
-# "syslog". If not an absolute path, the value of ServerRoot is used as the
-# root directory. Also see the "AccessLogLevel" directive in cupsd.conf.
+# Location of the file logging all access to the scheduler; may be the
+# name "syslog" or "journal". If not an absolute path, the value of
+# ServerRoot is used as the root directory. Also see the
+# "AccessLogLevel" directive in cupsd.conf.
AccessLog @CUPS_LOGDIR@/access_log
# Location of cache files used by the scheduler...
@@ -44,10 +45,10 @@ AccessLog @CUPS_LOGDIR@/access_log
# Location of the static web content served by the scheduler...
#DocumentRoot @CUPS_DOCROOT@
-# Location of the file logging all messages produced by the scheduler and any
-# helper programs; may be the name "syslog". If not an absolute path, the value
-# of ServerRoot is used as the root directory. Also see the "LogLevel"
-# directive in cupsd.conf.
+# Location of the file logging all messages produced by the scheduler
+# and any helper programs; may be the name "syslog" or "journal". If
+# not an absolute path, the value of ServerRoot is used as the root
+# directory. Also see the "LogLevel" # directive in cupsd.conf.
ErrorLog @CUPS_LOGDIR@/error_log
# Location of fonts used by older print filters...
@@ -56,10 +57,10 @@ ErrorLog @CUPS_LOGDIR@/error_log
# Location of LPD configuration
#LPDConfigFile @CUPS_DEFAULT_LPD_CONFIG_FILE@
-# Location of the file logging all pages printed by the scheduler and any
-# helper programs; may be the name "syslog". If not an absolute path, the value
-# of ServerRoot is used as the root directory. Also see the "PageLogFormat"
-# directive in cupsd.conf.
+# Location of the file logging all pages printed by the scheduler and
+# any helper programs; may be the name "syslog" or "journal". If not
+# an absolute path, the value of ServerRoot is used as the root
+# directory. Also see the "PageLogFormat" directive in cupsd.conf.
PageLog @CUPS_LOGDIR@/page_log
# Location of the file listing all of the local printers...