From: Martin Mares Date: Sat, 21 Feb 2009 21:05:29 +0000 (+0100) Subject: Logging: Let log_new_file() and log_new_fd() accept flags. X-Git-Tag: holmes-import~38 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=b6acda64c6f8fdb461fc62a03b4030bfc7f1ae07;p=libucw.git Logging: Let log_new_file() and log_new_fd() accept flags. This way, we can request a stream cloned to stderr (originally, this was available only via log_file()) or a FD-based stream which closes the FD upon closing. --- diff --git a/ucw/doc/log.txt b/ucw/doc/log.txt index 4eb15769..28265f72 100644 --- a/ucw/doc/log.txt +++ b/ucw/doc/log.txt @@ -82,7 +82,7 @@ Example int main(int argc, char **argv) { log_init(argv[0]); - struct log_stream *ls = log_new_file("/var/log/utterances"); + struct log_stream *ls = log_new_file("/var/log/utterances", 0); msg(L_INFO | ls->regnum, "Aye captain, we have a log file"); msg(L_INFO, "Alas, stderr still works"); return 0; diff --git a/ucw/log-conf.c b/ucw/log-conf.c index bda938fe..8989595d 100644 --- a/ucw/log-conf.c +++ b/ucw/log-conf.c @@ -282,7 +282,7 @@ do_new_configured(struct stream_config *c) return c->ls; if (c->file_name) - ls = log_new_file(c->file_name); + ls = log_new_file(c->file_name, 0); else if (c->syslog_facility) ls = log_new_syslog(c->syslog_facility, (c->syslog_pids ? LOG_PID : 0)); else diff --git a/ucw/log-file.c b/ucw/log-file.c index 64528081..efa0665f 100644 --- a/ucw/log-file.c +++ b/ucw/log-file.c @@ -29,12 +29,6 @@ struct file_stream { char *orig_name; // Original name with strftime escapes }; -enum log_file_flag { - FF_FORMAT_NAME = 1, // Name contains strftime escapes - FF_CLOSE_FD = 2, // Close the fd with the stream - FF_FD2_FOLLOWS = 4, // Maintain stderr as a clone of this stream -}; - #define MAX_EXPAND 64 // Maximum size of expansion of strftime escapes static int log_switch_nest; @@ -116,11 +110,12 @@ file_handler(struct log_stream *ls, struct log_msg *m) } struct log_stream * -log_new_fd(int fd) +log_new_fd(int fd, uns flags) { struct log_stream *ls = log_new_stream(sizeof(struct file_stream)); struct file_stream *fs = (struct file_stream *) ls; fs->fd = fd; + fs->flags = flags; ls->msgfmt = LSFMT_DEFAULT; ls->handler = file_handler; ls->close = file_close; @@ -129,8 +124,8 @@ log_new_fd(int fd) return ls; } -static struct log_stream * -do_log_new_file(const char *path, uns more_flags) +struct log_stream * +log_new_file(const char *path, uns flags) { struct log_stream *ls = log_new_stream(sizeof(struct file_stream)); struct file_stream *fs = (struct file_stream *) ls; @@ -138,7 +133,7 @@ do_log_new_file(const char *path, uns more_flags) fs->orig_name = xstrdup(path); if (strchr(path, '%')) fs->flags = FF_FORMAT_NAME; - fs->flags |= FF_CLOSE_FD | more_flags; + fs->flags |= FF_CLOSE_FD | flags; ls->msgfmt = LSFMT_DEFAULT; ls->handler = file_handler; ls->close = file_close; @@ -150,12 +145,6 @@ do_log_new_file(const char *path, uns more_flags) return ls; } -struct log_stream * -log_new_file(const char *path) -{ - return do_log_new_file(path, 0); -} - int log_switch(void) { @@ -189,7 +178,7 @@ log_file(const char *name) if (!name) return; - struct log_stream *ls = do_log_new_file(name, FF_FD2_FOLLOWS); + struct log_stream *ls = log_new_file(name, FF_FD2_FOLLOWS); struct log_stream *def = log_stream_by_flags(0); log_rm_substream(def, NULL); log_add_substream(def, ls); @@ -202,8 +191,8 @@ int main(int argc, char **argv) { log_init(argv[0]); log_file("/proc/self/fd/1"); - // struct log_stream *ls = log_new_fd(1); - // struct log_stream *ls = log_new_file("/tmp/quork-%Y%m%d-%H%M%S"); + // struct log_stream *ls = log_new_fd(1, 0); + // struct log_stream *ls = log_new_file("/tmp/quork-%Y%m%d-%H%M%S", 0); for (int i=1; i