version 1.9, 1999/11/22 21:02:38 |
version 1.10, 1999/11/23 22:25:53 |
|
|
static int log_facility = LOG_AUTH; |
static int log_facility = LOG_AUTH; |
|
|
/* Initialize the log. |
/* Initialize the log. |
av0 program name (should be argv[0]) |
* av0 program name (should be argv[0]) |
on_stderr print also on stderr |
* on_stderr print also on stderr |
level logging level |
* level logging level |
*/ |
*/ |
|
|
void log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr) |
void |
|
log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr) |
{ |
{ |
|
switch (level) { |
switch (level) |
case SYSLOG_LEVEL_QUIET: |
{ |
case SYSLOG_LEVEL_ERROR: |
case SYSLOG_LEVEL_QUIET: |
case SYSLOG_LEVEL_FATAL: |
case SYSLOG_LEVEL_ERROR: |
case SYSLOG_LEVEL_INFO: |
case SYSLOG_LEVEL_FATAL: |
case SYSLOG_LEVEL_VERBOSE: |
case SYSLOG_LEVEL_INFO: |
case SYSLOG_LEVEL_DEBUG: |
case SYSLOG_LEVEL_VERBOSE: |
log_level = level; |
case SYSLOG_LEVEL_DEBUG: |
break; |
log_level = level; |
default: |
break; |
fprintf(stderr, "Unrecognized internal syslog level code %d\n", |
default: |
(int) level); |
fprintf(stderr, "Unrecognized internal syslog level code %d\n", |
exit(1); |
(int)level); |
} |
exit(1); |
switch (facility) { |
} |
case SYSLOG_FACILITY_DAEMON: |
|
log_facility = LOG_DAEMON; |
switch (facility) |
break; |
{ |
case SYSLOG_FACILITY_USER: |
case SYSLOG_FACILITY_DAEMON: |
log_facility = LOG_USER; |
log_facility = LOG_DAEMON; |
break; |
break; |
case SYSLOG_FACILITY_AUTH: |
case SYSLOG_FACILITY_USER: |
log_facility = LOG_AUTH; |
log_facility = LOG_USER; |
break; |
break; |
case SYSLOG_FACILITY_LOCAL0: |
case SYSLOG_FACILITY_AUTH: |
log_facility = LOG_LOCAL0; |
log_facility = LOG_AUTH; |
break; |
break; |
case SYSLOG_FACILITY_LOCAL1: |
case SYSLOG_FACILITY_LOCAL0: |
log_facility = LOG_LOCAL1; |
log_facility = LOG_LOCAL0; |
break; |
break; |
case SYSLOG_FACILITY_LOCAL2: |
case SYSLOG_FACILITY_LOCAL1: |
log_facility = LOG_LOCAL2; |
log_facility = LOG_LOCAL1; |
break; |
break; |
case SYSLOG_FACILITY_LOCAL3: |
case SYSLOG_FACILITY_LOCAL2: |
log_facility = LOG_LOCAL3; |
log_facility = LOG_LOCAL2; |
break; |
break; |
case SYSLOG_FACILITY_LOCAL4: |
case SYSLOG_FACILITY_LOCAL3: |
log_facility = LOG_LOCAL4; |
log_facility = LOG_LOCAL3; |
break; |
break; |
case SYSLOG_FACILITY_LOCAL5: |
case SYSLOG_FACILITY_LOCAL4: |
log_facility = LOG_LOCAL5; |
log_facility = LOG_LOCAL4; |
break; |
break; |
case SYSLOG_FACILITY_LOCAL6: |
case SYSLOG_FACILITY_LOCAL5: |
log_facility = LOG_LOCAL6; |
log_facility = LOG_LOCAL5; |
break; |
break; |
case SYSLOG_FACILITY_LOCAL7: |
case SYSLOG_FACILITY_LOCAL6: |
log_facility = LOG_LOCAL7; |
log_facility = LOG_LOCAL6; |
break; |
break; |
default: |
case SYSLOG_FACILITY_LOCAL7: |
fprintf(stderr, "Unrecognized internal syslog facility code %d\n", |
log_facility = LOG_LOCAL7; |
(int) facility); |
break; |
exit(1); |
default: |
} |
fprintf(stderr, "Unrecognized internal syslog facility code %d\n", |
log_on_stderr = on_stderr; |
(int)facility); |
|
exit(1); |
|
} |
|
|
|
log_on_stderr = on_stderr; |
|
} |
} |
|
|
#define MSGBUFSIZE 1024 |
#define MSGBUFSIZE 1024 |
|
|
void |
void |
do_log(LogLevel level, const char *fmt, va_list args) |
do_log(LogLevel level, const char *fmt, va_list args) |
{ |
{ |
char msgbuf[MSGBUFSIZE]; |
char msgbuf[MSGBUFSIZE]; |
char fmtbuf[MSGBUFSIZE]; |
char fmtbuf[MSGBUFSIZE]; |
char *txt = NULL; |
char *txt = NULL; |
int pri = LOG_INFO; |
int pri = LOG_INFO; |
extern char *__progname; |
extern char *__progname; |
|
|
if (level > log_level) |
if (level > log_level) |
return; |
return; |
switch (level) |
switch (level) { |
{ |
case SYSLOG_LEVEL_ERROR: |
case SYSLOG_LEVEL_ERROR: |
txt = "error"; |
txt = "error"; |
pri = LOG_ERR; |
pri = LOG_ERR; |
break; |
break; |
case SYSLOG_LEVEL_FATAL: |
case SYSLOG_LEVEL_FATAL: |
txt = "fatal"; |
txt = "fatal"; |
pri = LOG_ERR; |
pri = LOG_ERR; |
break; |
break; |
case SYSLOG_LEVEL_INFO: |
case SYSLOG_LEVEL_INFO: |
case SYSLOG_LEVEL_VERBOSE: |
case SYSLOG_LEVEL_VERBOSE: |
pri = LOG_INFO; |
pri = LOG_INFO; |
break; |
break; |
case SYSLOG_LEVEL_DEBUG: |
case SYSLOG_LEVEL_DEBUG: |
txt = "debug"; |
txt = "debug"; |
pri = LOG_DEBUG; |
pri = LOG_DEBUG; |
break; |
break; |
default: |
default: |
txt = "internal error"; |
txt = "internal error"; |
pri = LOG_ERR; |
pri = LOG_ERR; |
break; |
break; |
} |
} |
if (txt != NULL) { |
|
snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt); |
if (txt != NULL) { |
vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args); |
snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt); |
} else { |
vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args); |
vsnprintf(msgbuf, sizeof(msgbuf), fmt, args); |
}else{ |
} |
vsnprintf(msgbuf, sizeof(msgbuf), fmt, args); |
if (log_on_stderr) |
} |
fprintf(stderr, "%s\n", msgbuf); |
if (log_on_stderr) |
openlog(__progname, LOG_PID, log_facility); |
fprintf(stderr, "%s\n", msgbuf); |
syslog(pri, "%.500s", msgbuf); |
openlog(__progname, LOG_PID, log_facility); |
closelog(); |
syslog(pri, "%.500s", msgbuf); |
|
closelog(); |
|
} |
} |