2 * UCW Library -- Keeping of Log Files
4 * (c) 1997--2005 Martin Mares <mj@ucw.cz>
6 * This software may be freely distributed and used according to the terms
7 * of the GNU Lesser General Public License.
18 static char *log_name_patt;
19 static int log_params;
20 static int log_filename_size;
21 volatile int log_switch_nest;
24 do_log_switch(struct tm *tm)
27 char name[log_filename_size];
31 log_filename[0] && !log_params)
34 l = strftime(name, log_filename_size, log_name_patt, tm);
35 if (l < 0 || l >= log_filename_size)
36 die("Error formatting log file name: %m");
37 if (strcmp(name, log_filename))
39 strcpy(log_filename, name);
40 fd = open(name, O_WRONLY | O_CREAT | O_APPEND, 0666);
42 die("Unable to open log file %s: %m", name);
57 time_t tim = time(NULL);
58 return do_log_switch(localtime(&tim));
62 internal_log_switch(struct tm *tm)
80 log_name_patt = xstrdup(name);
81 log_params = !!strchr(name, '%');
82 log_filename_size = strlen(name) + 64; /* 63 is an upper bound on expansion of % escapes */
83 log_filename = xmalloc(log_filename_size);
86 log_switch_hook = internal_log_switch;
98 int main(int argc, char **argv)
101 log_file("/proc/self/fd/1");
102 for (int i=1; i<argc; i++)
103 log(L_INFO, argv[i]);