mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-08 05:57:26 +03:00
log: handle multi-line log messages properly
This commit is contained in:
parent
b6dbbe1c98
commit
9726b29e98
6
fixme
6
fixme
@ -46,8 +46,9 @@
|
|||||||
|
|
||||||
- uuidd DONE
|
- uuidd DONE
|
||||||
- nscd DONE
|
- nscd DONE
|
||||||
|
- dbus DONE
|
||||||
- rpcbind (/var/run/rpcbind.sock!)
|
- rpcbind (/var/run/rpcbind.sock!)
|
||||||
- dbus
|
- avahi-daemon (/var/run/avahi-daemon/socket)
|
||||||
- rsyslog
|
- rsyslog
|
||||||
- cups
|
- cups
|
||||||
- ssh CLASSIC
|
- ssh CLASSIC
|
||||||
@ -55,7 +56,6 @@
|
|||||||
- apache/samba
|
- apache/samba
|
||||||
- libvirtd (/var/run/libvirt/libvirt-sock-ro)
|
- libvirtd (/var/run/libvirt/libvirt-sock-ro)
|
||||||
- bluetoothd (/var/run/sdp! @/org/bluez/audio!)
|
- bluetoothd (/var/run/sdp! @/org/bluez/audio!)
|
||||||
- avahi-daemon (/var/run/avahi-daemon/socket)
|
|
||||||
- distccd
|
- distccd
|
||||||
|
|
||||||
* teach dbus to talk to systemd when autospawning services
|
* teach dbus to talk to systemd when autospawning services
|
||||||
@ -63,6 +63,8 @@
|
|||||||
* Figure out which signal handlers we actually have to reset in the
|
* Figure out which signal handlers we actually have to reset in the
|
||||||
forked off child
|
forked off child
|
||||||
|
|
||||||
|
* loopback-setup is borked for ipv6
|
||||||
|
|
||||||
Regularly:
|
Regularly:
|
||||||
|
|
||||||
* look for close() vs. close_nointr() vs. close_nointr_nofail()
|
* look for close() vs. close_nointr() vs. close_nointr_nofail()
|
||||||
|
56
src/log.c
56
src/log.c
@ -312,31 +312,49 @@ static int log_dispatch(
|
|||||||
const char*file,
|
const char*file,
|
||||||
int line,
|
int line,
|
||||||
const char *func,
|
const char *func,
|
||||||
const char *buffer) {
|
char *buffer) {
|
||||||
|
|
||||||
int r;
|
int r = 0;
|
||||||
|
|
||||||
if (log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
|
do {
|
||||||
log_target == LOG_TARGET_SYSLOG) {
|
char *e;
|
||||||
|
int k;
|
||||||
|
|
||||||
if ((r = write_to_syslog(level, file, line, func, buffer)) < 0) {
|
buffer += strspn(buffer, NEWLINE);
|
||||||
log_close_syslog();
|
|
||||||
log_open_kmsg();
|
|
||||||
} else if (r > 0)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
|
if (buffer[0] == 0)
|
||||||
log_target == LOG_TARGET_KMSG) {
|
break;
|
||||||
|
|
||||||
if ((r = write_to_kmsg(level, file, line, func, buffer)) < 0) {
|
if ((e = strpbrk(buffer, NEWLINE)))
|
||||||
log_close_kmsg();
|
*(e++) = 0;
|
||||||
log_open_console();
|
|
||||||
} else if (r > 0)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return write_to_console(level, file, line, func, buffer);
|
if (log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
|
||||||
|
log_target == LOG_TARGET_SYSLOG) {
|
||||||
|
|
||||||
|
if ((r = write_to_syslog(level, file, line, func, buffer)) < 0) {
|
||||||
|
log_close_syslog();
|
||||||
|
log_open_kmsg();
|
||||||
|
} else if (r > 0)
|
||||||
|
r++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
|
||||||
|
log_target == LOG_TARGET_KMSG) {
|
||||||
|
|
||||||
|
if ((r = write_to_kmsg(level, file, line, func, buffer)) < 0) {
|
||||||
|
log_close_kmsg();
|
||||||
|
log_open_console();
|
||||||
|
} else if (r > 0)
|
||||||
|
r++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((k = write_to_console(level, file, line, func, buffer)) < 0)
|
||||||
|
return k;
|
||||||
|
|
||||||
|
buffer = e;
|
||||||
|
} while (buffer);
|
||||||
|
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int log_meta(
|
int log_meta(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user