X-Git-Url: https://rtime.felk.cvut.cz/gitweb/frescor/forb.git/blobdiff_plain/6224156b1e47fbf334528152ec10c63b18128071..d6d1fcee81ec3ad3dbab9a827e91fcde3692e50b:/src/forb.c diff --git a/src/forb.c b/src/forb.c index fe34081..663e6ad 100644 --- a/src/forb.c +++ b/src/forb.c @@ -85,6 +85,7 @@ #include #include #endif +#include #ifdef DEBUG #define UL_LOGL_DEF UL_LOGL_DEB @@ -94,6 +95,7 @@ #include "log_domains.inc" extern UL_LOG_CUST(ulogd_forb); +static int init_ul_log(void); UL_LOGREG_DOMAINS_INIT_FUNCTION(forb_logreg_domains, forb_logreg_domains_array); @@ -181,6 +183,7 @@ forb_init(int *argc, char **argv[], const struct forb_init_attr *attr) memset(forb, 0, sizeof(*forb)); /* Initialize ULUT logging facility */ + init_ul_log(); forb_logreg_domains(); if (attr) { @@ -496,3 +499,62 @@ __forb_sequence_alloc_buf_internal(void *seq, size_t seq_size, *maximum_ptr = *buf_pptr ? num_elements : 0; return (*buf_pptr != NULL) || (num_elements == 0); } + +static FILE *forb_ul_log_file; +static char progname[64] = ""; + +void +forb_ul_log_fnc(ul_log_domain_t *domain, int level, + const char *format, va_list ap) +{ + if(!(level&UL_LOGL_CONT)) { + level&=UL_LOGL_MASK; + fprintf(forb_ul_log_file,"%s:", progname); + if(level) + fprintf(forb_ul_log_file,"<%d>",level); + if(domain && domain->name) + fprintf(forb_ul_log_file,"%s: ",domain->name); + } + vfprintf(forb_ul_log_file, format, ap); + fflush(forb_ul_log_file); +} + +static int init_ul_log(void) +{ + char *s; + char *log_fname; + int fd; + int flg = 0; + char path[128]; + +/* if(ul_log_output != NULL) */ +/* return 0; */ + + fd = open("/proc/self/cmdline", O_RDONLY); + if (fd >= 0) { + int ret; + ret = read(fd, path, sizeof(path)-1); + if (ret > 0) { + path[ret]=0; + s = strrchr(path, '/'); + if (s) s++; + else s = path; + strncpy(progname, s, sizeof(progname)-1); + } + close(fd); + } + + if((log_fname=getenv("UL_LOG_FILENAME"))!=NULL){ + forb_ul_log_file=fopen(log_fname,"a"); + } + if(forb_ul_log_file==NULL) + forb_ul_log_file=stderr; + + if((s=getenv("UL_DEBUG_FLG")) != NULL){ + flg=atoi(s); + } + + ul_log_redir(forb_ul_log_fnc, flg); + + return 0; +}