mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-03 13:47:04 +03:00
logs-show: add short-precise mode with us timestamps
Also, always show us timestamps in verbose mode. https://bugzilla.redhat.com/show_bug.cgi?id=991678
This commit is contained in:
parent
c51cf05646
commit
f02d836794
@ -253,12 +253,11 @@
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<option>short-monotonic</option>
|
||||
<option>short-iso</option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>is very similar
|
||||
but shows monotonic
|
||||
timestamps instead of
|
||||
<para>is very similar,
|
||||
but shows ISO 8601
|
||||
wallclock timestamps.
|
||||
</para>
|
||||
</listitem>
|
||||
@ -266,11 +265,25 @@
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<option>short-iso</option>
|
||||
<option>short-precise</option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>is very similar,
|
||||
but shows ISO 8601
|
||||
but shows timestamps
|
||||
with full microsecond
|
||||
precision.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<option>short-monotonic</option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>is very similar
|
||||
but shows monotonic
|
||||
timestamps instead of
|
||||
wallclock timestamps.
|
||||
</para>
|
||||
</listitem>
|
||||
|
@ -134,8 +134,9 @@ static int help(void) {
|
||||
" -n --lines[=INTEGER] Number of journal entries to show\n"
|
||||
" --no-tail Show all lines, even in follow mode\n"
|
||||
" -r --reverse Show the newest entries first\n"
|
||||
" -o --output=STRING Change journal output mode (short, short-monotonic, short-iso\n"
|
||||
" verbose, export, json, json-pretty, json-sse, cat)\n"
|
||||
" -o --output=STRING Change journal output mode (short, short-iso,\n"
|
||||
" short-precise, short-monotonic, verbose,\n"
|
||||
" export, json, json-pretty, json-sse, cat)\n"
|
||||
" -x --catalog Add message explanations where available\n"
|
||||
" -l --full Do not ellipsize fields\n"
|
||||
" -a --all Show all fields, including long and unprintable\n"
|
||||
|
@ -318,10 +318,21 @@ static int output_short(
|
||||
}
|
||||
|
||||
t = (time_t) (x / USEC_PER_SEC);
|
||||
if (mode == OUTPUT_SHORT_ISO)
|
||||
|
||||
switch(mode) {
|
||||
case OUTPUT_SHORT_ISO:
|
||||
r = strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z", localtime_r(&t, &tm));
|
||||
else
|
||||
break;
|
||||
case OUTPUT_SHORT_PRECISE:
|
||||
r = strftime(buf, sizeof(buf), "%b %d %H:%M:%S", localtime_r(&t, &tm));
|
||||
if (r > 0) {
|
||||
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
||||
".%06llu", x % USEC_PER_SEC);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
r = strftime(buf, sizeof(buf), "%b %d %H:%M:%S", localtime_r(&t, &tm));
|
||||
}
|
||||
|
||||
if (r <= 0) {
|
||||
log_error("Failed to format time.");
|
||||
@ -380,7 +391,7 @@ static int output_verbose(
|
||||
size_t length;
|
||||
_cleanup_free_ char *cursor = NULL;
|
||||
uint64_t realtime;
|
||||
char ts[FORMAT_TIMESTAMP_MAX];
|
||||
char ts[FORMAT_TIMESTAMP_MAX + 7];
|
||||
int r;
|
||||
|
||||
assert(f);
|
||||
@ -402,7 +413,7 @@ static int output_verbose(
|
||||
}
|
||||
|
||||
fprintf(f, "%s [%s]\n",
|
||||
format_timestamp(ts, sizeof(ts), realtime),
|
||||
format_timestamp_us(ts, sizeof(ts), realtime),
|
||||
cursor);
|
||||
|
||||
JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
|
||||
@ -849,8 +860,9 @@ static int (*output_funcs[_OUTPUT_MODE_MAX])(
|
||||
OutputFlags flags) = {
|
||||
|
||||
[OUTPUT_SHORT] = output_short,
|
||||
[OUTPUT_SHORT_MONOTONIC] = output_short,
|
||||
[OUTPUT_SHORT_ISO] = output_short,
|
||||
[OUTPUT_SHORT_PRECISE] = output_short,
|
||||
[OUTPUT_SHORT_MONOTONIC] = output_short,
|
||||
[OUTPUT_VERBOSE] = output_verbose,
|
||||
[OUTPUT_EXPORT] = output_export,
|
||||
[OUTPUT_JSON] = output_json,
|
||||
@ -1131,8 +1143,9 @@ int show_journal_by_unit(
|
||||
|
||||
static const char *const output_mode_table[_OUTPUT_MODE_MAX] = {
|
||||
[OUTPUT_SHORT] = "short",
|
||||
[OUTPUT_SHORT_MONOTONIC] = "short-monotonic",
|
||||
[OUTPUT_SHORT_ISO] = "short-iso",
|
||||
[OUTPUT_SHORT_PRECISE] = "short-precise",
|
||||
[OUTPUT_SHORT_MONOTONIC] = "short-monotonic",
|
||||
[OUTPUT_VERBOSE] = "verbose",
|
||||
[OUTPUT_EXPORT] = "export",
|
||||
[OUTPUT_JSON] = "json",
|
||||
|
@ -23,8 +23,9 @@
|
||||
|
||||
typedef enum OutputMode {
|
||||
OUTPUT_SHORT,
|
||||
OUTPUT_SHORT_MONOTONIC,
|
||||
OUTPUT_SHORT_ISO,
|
||||
OUTPUT_SHORT_PRECISE,
|
||||
OUTPUT_SHORT_MONOTONIC,
|
||||
OUTPUT_VERBOSE,
|
||||
OUTPUT_EXPORT,
|
||||
OUTPUT_JSON,
|
||||
|
@ -168,6 +168,28 @@ char *format_timestamp(char *buf, size_t l, usec_t t) {
|
||||
return buf;
|
||||
}
|
||||
|
||||
char *format_timestamp_us(char *buf, size_t l, usec_t t) {
|
||||
struct tm tm;
|
||||
time_t sec;
|
||||
|
||||
assert(buf);
|
||||
assert(l > 0);
|
||||
|
||||
if (t <= 0)
|
||||
return NULL;
|
||||
|
||||
sec = (time_t) (t / USEC_PER_SEC);
|
||||
localtime_r(&sec, &tm);
|
||||
|
||||
if (strftime(buf, l, "%a %Y-%m-%d %H:%M:%S", &tm) <= 0)
|
||||
return NULL;
|
||||
snprintf(buf + strlen(buf), l - strlen(buf), ".%06llu", t % USEC_PER_SEC);
|
||||
if (strftime(buf + strlen(buf), l - strlen(buf), " %Z", &tm) <= 0)
|
||||
return NULL;
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
char *format_timestamp_relative(char *buf, size_t l, usec_t t) {
|
||||
usec_t n, d;
|
||||
|
||||
|
@ -73,6 +73,7 @@ usec_t timeval_load(const struct timeval *tv) _pure_;
|
||||
struct timeval *timeval_store(struct timeval *tv, usec_t u);
|
||||
|
||||
char *format_timestamp(char *buf, size_t l, usec_t t);
|
||||
char *format_timestamp_us(char *buf, size_t l, usec_t t);
|
||||
char *format_timestamp_relative(char *buf, size_t l, usec_t t);
|
||||
char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user