mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-26 10:03:40 +03:00
Merge pull request #17199 from poettering/log-tid
include thread ID in log output
This commit is contained in:
commit
5ced292d10
@ -149,6 +149,13 @@
|
||||
<literal>file:/</literal>, <literal>man:</literal> or <literal>info:</literal> URL.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>TID=</varname></term>
|
||||
<listitem>
|
||||
<para>The numeric thread ID (TID) the log message originates from.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
|
@ -613,37 +613,38 @@
|
||||
<variablelist class='environment-variables'>
|
||||
<varlistentry>
|
||||
<term><varname>$SYSTEMD_LOG_COLOR</varname></term>
|
||||
<listitem><para>Controls whether systemd highlights important
|
||||
log messages. This can be overridden with
|
||||
<option>--log-color</option>.</para></listitem>
|
||||
<listitem><para>Controls whether systemd highlights important log messages. This can be overridden
|
||||
with <option>--log-color=</option>.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>$SYSTEMD_LOG_LEVEL</varname></term>
|
||||
<listitem><para>systemd reads the log level from this
|
||||
environment variable. This can be overridden with
|
||||
<option>--log-level=</option>.</para></listitem>
|
||||
<listitem><para>systemd reads the log level from this environment variable. This can be overridden
|
||||
with <option>--log-level=</option>.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>$SYSTEMD_LOG_LOCATION</varname></term>
|
||||
<listitem><para>Controls whether systemd prints the code
|
||||
location along with log messages. This can be overridden with
|
||||
<option>--log-location</option>.</para></listitem>
|
||||
<listitem><para>Controls whether systemd prints the code location along with log messages. This can
|
||||
be overridden with <option>--log-location=</option>.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>$SYSTEMD_LOG_TARGET</varname></term>
|
||||
<listitem><para>systemd reads the log target from this
|
||||
environment variable. This can be overridden with
|
||||
<option>--log-target=</option>.</para></listitem>
|
||||
<listitem><para>systemd reads the log target from this environment variable. This can be overridden
|
||||
with <option>--log-target=</option>.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>$SYSTEMD_LOG_TIME</varname></term>
|
||||
<listitem><para>Controls whether systemd prefixes log
|
||||
messages with the current time. This can be overridden with
|
||||
<option>--log-time=</option>.</para></listitem>
|
||||
<listitem><para>Controls whether systemd prefixes log messages with the current time. This can be
|
||||
overridden with <option>--log-time=</option>.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>$SYSTEMD_LOG_TID</varname></term>
|
||||
<listitem><para>Controls whether systemd prefixes log messages with the current thread ID
|
||||
(TID).</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
@ -844,16 +845,15 @@
|
||||
<term><varname>systemd.log_location</varname></term>
|
||||
<term><varname>systemd.log_target=</varname></term>
|
||||
<term><varname>systemd.log_time</varname></term>
|
||||
<term><varname>systemd.log_tid</varname></term>
|
||||
|
||||
<listitem><para>Controls log output, with the same effect as the
|
||||
<varname>$SYSTEMD_LOG_COLOR</varname>,
|
||||
<varname>$SYSTEMD_LOG_LEVEL</varname>,
|
||||
<varname>$SYSTEMD_LOG_LOCATION</varname>,
|
||||
<varname>$SYSTEMD_LOG_TARGET</varname>,
|
||||
<varname>$SYSTEMD_LOG_TIME</varname>, environment variables described above.
|
||||
<varname>systemd.log_color</varname>, <varname>systemd.log_location</varname>, and
|
||||
<varname>systemd.log_time</varname> can be specified without an argument, with the
|
||||
same effect as a positive boolean.</para></listitem>
|
||||
<varname>$SYSTEMD_LOG_COLOR</varname>, <varname>$SYSTEMD_LOG_LEVEL</varname>,
|
||||
<varname>$SYSTEMD_LOG_LOCATION</varname>, <varname>$SYSTEMD_LOG_TARGET</varname>,
|
||||
<varname>$SYSTEMD_LOG_TIME</varname>, <varname>$SYSTEMD_LOG_TID</varname> environment variables
|
||||
described above. <varname>systemd.log_color</varname>, <varname>systemd.log_location</varname>,
|
||||
<varname>systemd.log_time</varname> and <varname>systemd.log_tid=</varname> can be specified without
|
||||
an argument, with the same effect as a positive boolean.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "io-util.h"
|
||||
#include "log.h"
|
||||
#include "macro.h"
|
||||
#include "missing_syscall.h"
|
||||
#include "parse-util.h"
|
||||
#include "proc-cmdline.h"
|
||||
#include "process-util.h"
|
||||
@ -53,6 +54,7 @@ static bool syslog_is_stream = false;
|
||||
static bool show_color = false;
|
||||
static bool show_location = false;
|
||||
static bool show_time = false;
|
||||
static bool show_tid = false;
|
||||
|
||||
static bool upgrade_syslog_to_journal = false;
|
||||
static bool always_reopen_console = false;
|
||||
@ -360,8 +362,9 @@ static int write_to_console(
|
||||
|
||||
char location[256],
|
||||
header_time[FORMAT_TIMESTAMP_MAX],
|
||||
prefix[1 + DECIMAL_STR_MAX(int) + 2];
|
||||
struct iovec iovec[8] = {};
|
||||
prefix[1 + DECIMAL_STR_MAX(int) + 2],
|
||||
tid_string[3 + DECIMAL_STR_MAX(pid_t) + 1];
|
||||
struct iovec iovec[9];
|
||||
const char *on = NULL, *off = NULL;
|
||||
size_t n = 0;
|
||||
|
||||
@ -380,6 +383,11 @@ static int write_to_console(
|
||||
}
|
||||
}
|
||||
|
||||
if (show_tid) {
|
||||
xsprintf(tid_string, "(" PID_FMT ") ", gettid());
|
||||
iovec[n++] = IOVEC_MAKE_STRING(tid_string);
|
||||
}
|
||||
|
||||
if (show_color)
|
||||
get_log_colors(LOG_PRI(level), &on, &off, NULL);
|
||||
|
||||
@ -539,6 +547,7 @@ static int log_do_header(
|
||||
r = snprintf(header, size,
|
||||
"PRIORITY=%i\n"
|
||||
"SYSLOG_FACILITY=%i\n"
|
||||
"TID=" PID_FMT "\n"
|
||||
"%s%.256s%s" /* CODE_FILE */
|
||||
"%s%.*i%s" /* CODE_LINE */
|
||||
"%s%.256s%s" /* CODE_FUNC */
|
||||
@ -548,6 +557,7 @@ static int log_do_header(
|
||||
"SYSLOG_IDENTIFIER=%.256s\n",
|
||||
LOG_PRI(level),
|
||||
LOG_FAC(level),
|
||||
gettid(),
|
||||
isempty(file) ? "" : "CODE_FILE=",
|
||||
isempty(file) ? "" : file,
|
||||
isempty(file) ? "" : "\n",
|
||||
@ -1133,6 +1143,11 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
|
||||
if (log_show_location_from_string(value ?: "1") < 0)
|
||||
log_warning("Failed to parse log location setting '%s'. Ignoring.", value);
|
||||
|
||||
} else if (proc_cmdline_key_streq(key, "systemd.log_tid")) {
|
||||
|
||||
if (log_show_tid_from_string(value ?: "1") < 0)
|
||||
log_warning("Failed to parse log tid setting '%s'. Ignoring.", value);
|
||||
|
||||
} else if (proc_cmdline_key_streq(key, "systemd.log_time")) {
|
||||
|
||||
if (log_show_time_from_string(value ?: "1") < 0)
|
||||
@ -1177,6 +1192,10 @@ void log_parse_environment_cli_realm(LogRealm realm) {
|
||||
e = getenv("SYSTEMD_LOG_TIME");
|
||||
if (e && log_show_time_from_string(e) < 0)
|
||||
log_warning("Failed to parse log time '%s'. Ignoring.", e);
|
||||
|
||||
e = getenv("SYSTEMD_LOG_TID");
|
||||
if (e && log_show_tid_from_string(e) < 0)
|
||||
log_warning("Failed to parse log tid '%s'. Ignoring.", e);
|
||||
}
|
||||
|
||||
LogTarget log_get_target(void) {
|
||||
@ -1211,6 +1230,14 @@ bool log_get_show_time(void) {
|
||||
return show_time;
|
||||
}
|
||||
|
||||
void log_show_tid(bool b) {
|
||||
show_tid = b;
|
||||
}
|
||||
|
||||
bool log_get_show_tid(void) {
|
||||
return show_tid;
|
||||
}
|
||||
|
||||
int log_show_color_from_string(const char *e) {
|
||||
int t;
|
||||
|
||||
@ -1244,6 +1271,17 @@ int log_show_time_from_string(const char *e) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int log_show_tid_from_string(const char *e) {
|
||||
int t;
|
||||
|
||||
t = parse_boolean(e);
|
||||
if (t < 0)
|
||||
return t;
|
||||
|
||||
log_show_tid(t);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool log_on_console(void) {
|
||||
if (IN_SET(log_target, LOG_TARGET_CONSOLE,
|
||||
LOG_TARGET_CONSOLE_PREFIXED))
|
||||
|
@ -61,10 +61,13 @@ void log_show_location(bool b);
|
||||
bool log_get_show_location(void) _pure_;
|
||||
void log_show_time(bool b);
|
||||
bool log_get_show_time(void) _pure_;
|
||||
void log_show_tid(bool b);
|
||||
bool log_get_show_tid(void) _pure_;
|
||||
|
||||
int log_show_color_from_string(const char *e);
|
||||
int log_show_location_from_string(const char *e);
|
||||
int log_show_time_from_string(const char *e);
|
||||
int log_show_tid_from_string(const char *e);
|
||||
|
||||
LogTarget log_get_target(void) _pure_;
|
||||
int log_get_max_level_realm(LogRealm realm) _pure_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user