Like --fork and --nofork, these override what the configuration says.
Use --syslog-only to force the systemd services to log to the Journal
(via syslog, which means we see the severity metadata) instead of
testing sd_booted() in the configuration implementation.
Signed-off-by: Simon McVittie <smcv@debian.org>
#include <signal.h>
#endif
-#ifdef HAVE_SYSTEMD
-#include <systemd/sd-daemon.h>
-#endif
-
struct BusContext
{
int refcount;
DBusList **auth_mechanisms_list;
int len;
dbus_bool_t retval;
+ DBusLogFlags log_flags = DBUS_LOG_FLAGS_STDERR;
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
auth_mechanisms = NULL;
pidfile = NULL;
- context->syslog = bus_config_parser_get_syslog (parser);
+ if (flags & BUS_CONTEXT_FLAG_SYSLOG_ALWAYS)
+ {
+ context->syslog = TRUE;
+ log_flags |= DBUS_LOG_FLAGS_SYSTEM_LOG;
- if (context->syslog)
+ if (flags & BUS_CONTEXT_FLAG_SYSLOG_ONLY)
+ log_flags &= ~DBUS_LOG_FLAGS_STDERR;
+ }
+ else if (flags & BUS_CONTEXT_FLAG_SYSLOG_NEVER)
{
-#ifdef HAVE_SYSTEMD
- /* If running under systemd, we don't want to log to both stderr and
- * syslog, because our stderr is probably connected to journald too,
- * so we'd duplicate all our messages. */
- if (sd_booted () > 0)
- _dbus_init_system_log ("dbus-daemon", DBUS_LOG_FLAGS_SYSTEM_LOG);
- else
-#endif
- _dbus_init_system_log ("dbus-daemon",
- DBUS_LOG_FLAGS_SYSTEM_LOG | DBUS_LOG_FLAGS_STDERR);
+ context->syslog = FALSE;
}
else
{
- _dbus_init_system_log ("dbus-daemon", DBUS_LOG_FLAGS_STDERR);
+ context->syslog = bus_config_parser_get_syslog (parser);
+
+ if (context->syslog)
+ log_flags |= DBUS_LOG_FLAGS_SYSTEM_LOG;
}
+ _dbus_init_system_log ("dbus-daemon", log_flags);
+
if (flags & BUS_CONTEXT_FLAG_SYSTEMD_ACTIVATION)
context->systemd_activation = TRUE;
else
BUS_CONTEXT_FLAG_FORK_ALWAYS = (1 << 1),
BUS_CONTEXT_FLAG_FORK_NEVER = (1 << 2),
BUS_CONTEXT_FLAG_WRITE_PID_FILE = (1 << 3),
- BUS_CONTEXT_FLAG_SYSTEMD_ACTIVATION = (1 << 4)
+ BUS_CONTEXT_FLAG_SYSTEMD_ACTIVATION = (1 << 4),
+ BUS_CONTEXT_FLAG_SYSLOG_ALWAYS = (1 << 5),
+ BUS_CONTEXT_FLAG_SYSLOG_NEVER = (1 << 6),
+ BUS_CONTEXT_FLAG_SYSLOG_ONLY = (1 << 7)
} BusContextFlags;
BusContext* bus_context_new (const DBusString *config_file,
Requires=dbus.socket
[Service]
-ExecStart=@EXPANDED_BINDIR@/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
+ExecStart=@EXPANDED_BINDIR@/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
ExecReload=@EXPANDED_BINDIR@/dbus-send --print-reply --system --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig
OOMScoreAdjust=-900
" [--introspect]"
" [--address=ADDRESS]"
" [--nopidfile]"
+ " [--nosyslog]"
+ " [--syslog]"
+ " [--syslog-only]"
" [--nofork]"
#ifdef DBUS_UNIX
" [--fork]"
{
introspect ();
}
+ else if (strcmp (arg, "--nosyslog") == 0)
+ {
+ flags &= ~BUS_CONTEXT_FLAG_SYSLOG_ALWAYS;
+ flags |= BUS_CONTEXT_FLAG_SYSLOG_NEVER;
+ }
+ else if (strcmp (arg, "--syslog") == 0)
+ {
+ flags &= ~BUS_CONTEXT_FLAG_SYSLOG_NEVER;
+ flags |= BUS_CONTEXT_FLAG_SYSLOG_ALWAYS;
+ }
+ else if (strcmp (arg, "--syslog-only") == 0)
+ {
+ flags &= ~BUS_CONTEXT_FLAG_SYSLOG_NEVER;
+ flags |= (BUS_CONTEXT_FLAG_SYSLOG_ALWAYS|BUS_CONTEXT_FLAG_SYSLOG_ONLY);
+ }
else if (strcmp (arg, "--nofork") == 0)
{
flags &= ~BUS_CONTEXT_FLAG_FORK_ALWAYS;
Requires=dbus.socket
[Service]
-ExecStart=@EXPANDED_BINDIR@/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
+ExecStart=@EXPANDED_BINDIR@/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
ExecReload=@EXPANDED_BINDIR@/dbus-send --print-reply --session --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig
<arg choice='opt'><arg choice='plain'>--print-address </arg><arg choice='opt'><replaceable>=DESCRIPTOR</replaceable></arg></arg>
<arg choice='opt'><arg choice='plain'>--print-pid </arg><arg choice='opt'><replaceable>=DESCRIPTOR</replaceable></arg></arg>
<arg choice='opt'>--fork </arg>
+ <arg choice='opt'>--nosyslog </arg>
+ <arg choice='opt'>--syslog </arg>
+ <arg choice='opt'>--syslog-only </arg>
<sbr/>
</cmdsynopsis>
</refsynopsisdiv>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><option>--syslog</option></term>
+ <listitem>
+ <para>Force the message bus to use the system log for messages,
+ in addition to writing to standard error, even if the configuration
+ file does not specify that it should. On Unix, this uses
+ the syslog; on Windows, this uses OutputDebugString().</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--syslog-only</option></term>
+ <listitem>
+ <para>Force the message bus to use the system log for messages,
+ and <emphasis>not</emphasis> duplicate them to standard error.
+ On Unix, this uses the syslog; on Windows, this uses
+ OutputDebugString().</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--nosyslog</option></term>
+ <listitem>
+ <para>Force the message bus to use only standard error for messages,
+ even if the configuration file specifies that it should use
+ the system log.</para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</refsect1>
</itemizedlist>
-<para>If present, the bus daemon will log to syslog.</para>
+<para>If present, the bus daemon will log to syslog. The
+ --syslog, --syslog-only and --nosyslog command-line options take precedence
+ over this setting.</para>
<itemizedlist remap='TP'>