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.
19 static char *log_name_patt;
20 static int log_params;
21 static int log_filename_size;
25 do_log_switch(struct tm *tm)
28 char name[log_filename_size];
32 log_filename[0] && !log_params)
35 l = strftime(name, log_filename_size, log_name_patt, tm);
36 if (l < 0 || l >= log_filename_size)
37 die("Error formatting log file name: %m");
38 if (strcmp(name, log_filename))
40 strcpy(log_filename, name);
41 fd = open(name, O_WRONLY | O_CREAT | O_APPEND, 0666);
43 die("Unable to open log file %s: %m", name);
58 time_t tim = time(NULL);
59 return do_log_switch(localtime(&tim));
63 internal_log_switch(struct tm *tm)
81 log_name_patt = xstrdup(name);
82 log_params = !!strchr(name, '%');
83 log_filename_size = strlen(name) + 64; /* 63 is an upper bound on expansion of % escapes */
84 log_filename = xmalloc(log_filename_size);
87 log_switch_hook = internal_log_switch;
89 open("/dev/null", O_RDWR, 0);
101 int main(int argc, char **argv)
104 log_file("/proc/self/fd/1");
105 for (int i=1; i<argc; i++)
106 log(L_INFO, argv[i]);