mirror of
https://github.com/systemd/systemd.git
synced 2025-03-28 02:50:16 +03:00
man: add a whole section detailing journal stdout/stderr stream logging
Details about EPIPE/SIGPIPE handling, metadata and more. Fixes: #6620
This commit is contained in:
parent
fa69a4c74b
commit
157148d6d3
@ -70,19 +70,18 @@
|
||||
<itemizedlist>
|
||||
<listitem><para>Kernel log messages, via kmsg</para></listitem>
|
||||
|
||||
<listitem><para>Simple system log messages, via the libc
|
||||
<citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
||||
<listitem><para>Simple system log messages, via the <filename>libc</filename> <citerefentry
|
||||
project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
||||
call</para></listitem>
|
||||
|
||||
<listitem><para>Structured system log messages via the native
|
||||
Journal API, see
|
||||
<citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>4</manvolnum></citerefentry></para></listitem>
|
||||
|
||||
<listitem><para>Standard output and standard error of system
|
||||
services</para></listitem>
|
||||
<listitem><para>Standard output and standard error of service units. For further details see
|
||||
below.</para></listitem>
|
||||
|
||||
<listitem><para>Audit records, via the audit
|
||||
subsystem</para></listitem>
|
||||
<listitem><para>Audit records, originating from the kernel audit subsystem</para></listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>The daemon will implicitly collect numerous metadata fields
|
||||
@ -111,6 +110,49 @@ systemd-tmpfiles --create --prefix /var/log/journal</programlisting>
|
||||
for information about the configuration of this service.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Stream logging</title>
|
||||
|
||||
<para>The systemd service manager invokes all service processes with standard output and standard error connected
|
||||
to the journal by default. This behaviour may be altered via the
|
||||
<varname>StandardOutput=</varname>/<varname>StandardError=</varname> unit file settings, see
|
||||
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details. The
|
||||
journal converts the log byte stream received this way into individual log records, splitting the stream at newline
|
||||
(<literal>\n</literal>, ASCII <constant>10</constant>) and <constant>NUL</constant> bytes.</para>
|
||||
|
||||
<para>If <filename>systemd-journald.service</filename> is stopped, the stream connections associated with all
|
||||
services are terminated. Further writes to those streams by the service will result in <constant>EPIPE</constant>
|
||||
errors. In order to react gracefully in this case it is recommended that programs logging to standard output/error
|
||||
ignore such errors. If the the <constant>SIGPIPE</constant> UNIX signal handler is not blocked or turned off, such
|
||||
write attempts will also result in such process signals being generated, see
|
||||
<citerefentry><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry>. To mitigate this issue,
|
||||
systemd service manager explicitly turns off the <constant>SIGPIPE</constant> signal for all invoked processes by
|
||||
default (this may be changed for each unit individually via the <varname>IgnoreSIGPIPE=</varname> option, see
|
||||
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
|
||||
details). After the standard output/standard error streams have been terminated they may not be recovered until the
|
||||
services they are associated with are restarted. Note that during normal operation,
|
||||
<filename>systemd-journald.service</filename> stores copies of the file descriptors for those streams in the
|
||||
service manager. If <filename>systemd-journald.service</filename> is restarted using <command>systemctl
|
||||
restart</command> or equivalent operation instead of a pair of separate <command>systemctl stop</command> and
|
||||
<command>systemctl start</command> commands (or equivalent operations), these stream connections are not terminated
|
||||
and survive the restart. It is thus safe to restart <filename>systemd-journald.service</filename>, but stopping it
|
||||
is not recommended.</para>
|
||||
|
||||
<para>Note that the log record metadata for records transferred via such standard output/error streams reflect the
|
||||
metadata of the peer the stream was originally created for. If the stream connection is passed on to other
|
||||
processes (such as further child processes forked off the main service process), the log records will not reflect
|
||||
their metadata, but will continue to describe the original process. This is different from the other logging
|
||||
transports listed above, which are inherently record based and where the metadata is always associated with the
|
||||
individual record.</para>
|
||||
|
||||
<para>In addition to the the implicit standard output/error logging of services, stream logging is also available
|
||||
via the <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry> command
|
||||
line tool.</para>
|
||||
|
||||
<para> Currently, the number of parallel log streams <filename>systemd-journald</filename> will accept is limited
|
||||
to 4096.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Signals</title>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user