--- src/journal/journald-console.c | 33 ++++++++++++++++++++++++++++++--- 1 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/src/journal/journald-console.c b/src/journal/journald-console.c index be55f94..93e3241 100644 --- a/src/journal/journald-console.c +++ b/src/journal/journald-console.c @@ -19,13 +19,30 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/ +#include <time.h> #include <fcntl.h> #include <unistd.h> #include <sys/socket.h> +#include "fileio.h" #include "journald-server.h" #include "journald-console.h" +static bool prefix_timestamp(void) { + + static int printk_time = -1; + + if (printk_time < 0) { + _cleanup_free_ char *p = NULL; + + printk_time = + read_one_line_file("/sys/module/printk/parameters/time", &p) >= 0 && + parse_boolean(p) > 0; + } + + return printk_time; +} + void server_forward_console( Server *s, int priority, @@ -33,8 +50,10 @@ void server_forward_console( const char *message, struct ucred *ucred) { - struct iovec iovec[4]; + struct iovec iovec[5]; char header_pid[16]; + char tbuf[50]; + struct timespec ts; int n = 0, fd; char *ident_buf = NULL; const char *tty; @@ -45,7 +64,15 @@ void server_forward_console( if (LOG_PRI(priority) > s->max_level_console) return; - /* First: identifier and PID */ + /* First: timestamp */ + if (prefix_timestamp()) { + assert_se(clock_gettime(CLOCK_MONOTONIC, &ts) == 0); + snprintf(tbuf, sizeof(tbuf), "[%5llu.%06llu] ", + (unsigned long long)ts.tv_sec, (unsigned long long)ts.tv_nsec/1000); + IOVEC_SET_STRING(iovec[n++], tbuf); + } + + /* Second: identifier and PID */ if (ucred) { if (!identifier) { get_process_comm(ucred->pid, &ident_buf); @@ -64,7 +91,7 @@ void server_forward_console( IOVEC_SET_STRING(iovec[n++], ": "); } - /* Third: message */ + /* Fourth: message */ IOVEC_SET_STRING(iovec[n++], message); IOVEC_SET_STRING(iovec[n++], "\n"); -- 1.7.2.5 _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
