log: add automatic log target

This commit is contained in:
Lennart Poettering 2010-11-12 01:01:04 +01:00
parent 7f4e08056d
commit bb7df0da2d
3 changed files with 27 additions and 17 deletions

View File

@ -154,7 +154,7 @@ int main(int argc, char *argv[]) {
return EXIT_FAILURE;
}
log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
log_set_target(LOG_TARGET_AUTO);
log_parse_environment();
log_open();

View File

@ -196,20 +196,26 @@ int log_open(void) {
return 0;
}
if (log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_SYSLOG)
if ((r = log_open_syslog()) >= 0) {
log_close_console();
return r;
}
if (log_target != LOG_TARGET_AUTO ||
getpid() == 1 ||
isatty(STDERR_FILENO) <= 0)) {
if (log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_KMSG)
if ((r = log_open_kmsg()) >= 0) {
log_close_syslog();
log_close_console();
return r;
}
if (log_target == LOG_TARGET_AUTO ||
log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_SYSLOG)
if ((r = log_open_syslog()) >= 0) {
log_close_console();
return r;
}
if (log_target == LOG_TARGET_AUTO ||
log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_KMSG)
if ((r = log_open_kmsg()) >= 0) {
log_close_syslog();
log_close_console();
return r;
}
}
log_close_syslog();
@ -383,7 +389,8 @@ static int log_dispatch(
if ((e = strpbrk(buffer, NEWLINE)))
*(e++) = 0;
if (log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
if (log_target == LOG_TARGET_AUTO ||
log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_SYSLOG) {
if ((k = write_to_syslog(level, file, line, func, buffer)) < 0) {
@ -394,7 +401,8 @@ static int log_dispatch(
}
if (k <= 0 &&
(log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
(log_target == LOG_TARGET_AUTO ||
log_target == LOG_TARGET_SYSLOG_OR_KMSG ||
log_target == LOG_TARGET_KMSG)) {
if ((k = write_to_kmsg(level, file, line, func, buffer)) < 0) {
@ -568,7 +576,8 @@ static const char *const log_target_table[] = {
[LOG_TARGET_SYSLOG] = "syslog",
[LOG_TARGET_KMSG] = "kmsg",
[LOG_TARGET_SYSLOG_OR_KMSG] = "syslog-or-kmsg",
[LOG_TARGET_NULL] = "null"
[LOG_TARGET_NULL] = "null",
[LOG_TARGET_AUTO] = "auto"
};
DEFINE_STRING_TABLE_LOOKUP(log_target, LogTarget);

View File

@ -34,6 +34,7 @@ typedef enum LogTarget{
LOG_TARGET_KMSG,
LOG_TARGET_SYSLOG,
LOG_TARGET_SYSLOG_OR_KMSG,
LOG_TARGET_AUTO, /* console if stderr is tty, SYSLOG_OR_KMSG otherwise */
LOG_TARGET_NULL,
_LOG_TARGET_MAX,
_LOG_TARGET_INVALID = -1