X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Flogfile.c;h=c8ea268aa3fe74fdb5e34006aaa687125aff40f5;hb=b116e9366c7b2ea2c2eb53b0a13df4090e176235;hp=03cc5f65858078c4d107ccfa10df48de2395eeac;hpb=94a044f90357edefa6f4ae9f0b1d5885b0e34aee;p=debian%2Famanda diff --git a/server-src/logfile.c b/server-src/logfile.c index 03cc5f6..c8ea268 100644 --- a/server-src/logfile.c +++ b/server-src/logfile.c @@ -52,7 +52,8 @@ char *logtype_str[] = { char *program_str[] = { "UNKNOWN", "planner", "driver", "amreport", "dumper", "chunker", - "taper", "amflush" + "taper", "amflush", "amdump", "amidxtaped", "amfetchdump", "amcheckdump", + "amvault", }; int curlinenum; @@ -78,45 +79,35 @@ static void open_log(void); static void close_log(void); void -logerror( - char * msg) +amanda_log_trace_log( + GLogLevelFlags log_level, + const gchar *message) { - log_add(L_FATAL, "%s", msg); -} - - -printf_arglist_function2(char *log_genstring, logtype_t, typ, char *, pname, char *, format) -{ - va_list argp; - char *leader = NULL; - char linebuf[STR_SIZE]; - char *xlated_fmt = dgettext("C", format); + logtype_t logtype = L_ERROR; - /* format error message */ - - if((int)typ <= (int)L_BOGUS || (int)typ > (int)L_MARKER) typ = L_BOGUS; + switch (log_level) { + case G_LOG_LEVEL_ERROR: + case G_LOG_LEVEL_CRITICAL: + logtype = L_FATAL; + break; - if(multiline > 0) { - leader = stralloc(" "); /* continuation line */ - } else { - leader = vstralloc(logtype_str[(int)typ], " ", pname, " ", NULL); + default: + return; } - - arglist_start(argp, format); - g_vsnprintf(linebuf, SIZEOF(linebuf)-1, xlated_fmt, argp); - /* -1 to allow for '\n' */ - arglist_end(argp); - return(vstralloc(leader, linebuf, "\n", NULL)); + log_add(logtype, "%s", message); } -printf_arglist_function1(void log_add, logtype_t, typ, char *, format) +static void log_add_full_v(logtype_t typ, char *pname, char *format, va_list argp) { - va_list argp; - int saved_errout; char *leader = NULL; char *xlated_fmt = gettext(format); char linebuf[STR_SIZE]; size_t n; + static gboolean in_log_add = 0; + + /* avoid recursion */ + if (in_log_add) + return; /* format error message */ @@ -125,35 +116,34 @@ printf_arglist_function1(void log_add, logtype_t, typ, char *, format) if(multiline > 0) { leader = stralloc(" "); /* continuation line */ } else { - leader = vstralloc(logtype_str[(int)typ], " ", get_pname(), " ", NULL); + leader = vstralloc(logtype_str[(int)typ], " ", pname, " ", NULL); } - arglist_start(argp, format); - g_vsnprintf(linebuf, SIZEOF(linebuf)-1, xlated_fmt, argp); + /* use sizeof(linebuf)-2 to save space for a trailing newline */ + g_vsnprintf(linebuf, SIZEOF(linebuf)-2, xlated_fmt, argp); /* -1 to allow for '\n' */ - arglist_end(argp); /* avoid recursive call from error() */ - saved_errout = erroutput_type; - erroutput_type &= ~ERR_AMANDALOG; + in_log_add = 1; /* append message to the log file */ if(multiline == -1) open_log(); - if (fullwrite(logfd, leader, strlen(leader)) < 0) { + if (full_write(logfd, leader, strlen(leader)) < strlen(leader)) { error(_("log file write error: %s"), strerror(errno)); /*NOTREACHED*/ } amfree(leader); + /* add a newline if necessary */ n = strlen(linebuf); if(n == 0 || linebuf[n-1] != '\n') linebuf[n++] = '\n'; linebuf[n] = '\0'; - if (fullwrite(logfd, linebuf, n) < 0) { + if (full_write(logfd, linebuf, n) < n) { error(_("log file write error: %s"), strerror(errno)); /*NOTREACHED*/ } @@ -161,7 +151,25 @@ printf_arglist_function1(void log_add, logtype_t, typ, char *, format) if(multiline != -1) multiline++; else close_log(); - erroutput_type = saved_errout; + in_log_add = 0; +} + +void log_add(logtype_t typ, char *format, ...) +{ + va_list argp; + + arglist_start(argp, format); + log_add_full_v(typ, get_pname(), format, argp); + arglist_end(argp); +} + +void log_add_full(logtype_t typ, char *pname, char *format, ...) +{ + va_list argp; + + arglist_start(argp, format); + log_add_full_v(typ, pname, format, argp); + arglist_end(argp); } void @@ -226,11 +234,6 @@ open_log(void) { char *conf_logdir; - /* now that we have a logfile, let the debug module know how to write - * error messages to it. This is due to some rather obscure linking - * problems. */ - set_logerror(logerror); - conf_logdir = config_dir_relative(getconf_str(CNF_LOGDIR)); logfile = vstralloc(conf_logdir, "/log", NULL); amfree(conf_logdir);