static void vMessage(uint32_t class, const char *message, va_list args)
{
- if (system_log) {
- /* Messages go to the system log interface */
- vslilog_part(system_log, class, message, args);
- } else {
- vMessageFallback(class,message,args);
- }
+ vslilog_part(system_log, class, message, args);
}
void Message(uint32_t class, const char *message, ...)
va_end(args);
}
+void cfgfile_log__vmsg(void *sst, int class, const char *message, va_list args)
+{
+ struct cfgfile_log *st=sst;
+ vcfgfatal_maybefile(0,st->loc,st->facility,message,args,"\n");
+}
+
void cfgfile_postreadcheck(struct cloc loc, FILE *f)
{
assert(loc.file);
{ NULL, 0 }
};
+static void logfile_file_init(struct logfile *st, FILE *f, const char *desc)
+{
+ st->cl.description=desc;
+ st->cl.type=CL_LOG;
+ st->cl.apply=NULL;
+ st->cl.interface=&st->ops;
+ st->ops.st=st;
+ st->ops.vlogfn=logfile_vlog;
+ st->ops.buff[0]=0;
+ st->f=f;
+ st->logfile=0;
+ st->prefix="";
+ st->forked=0;
+ st->loc.file=0;
+ st->loc.line=-1;
+}
+
static list_t *logfile_apply(closure_t *self, struct cloc loc, dict_t *context,
list_t *args)
{
become a daemon. */
NEW(st);
- st->cl.description="logfile";
- st->cl.type=CL_LOG;
- st->cl.apply=NULL;
- st->cl.interface=&st->ops;
- st->ops.st=st;
- st->ops.vlogfn=logfile_vlog;
- st->ops.buff[0]=0;
st->loc=loc;
- st->f=stderr;
- st->prefix="";
- st->forked=0;
+ logfile_file_init(st,stderr,"logfile");
item=list_elem(args,0);
if (!item || item->type!=t_dict) {
prefix);
}
+static struct logfile startup_log;
+void log_early_init(void)
+{
+ logfile_file_init(&startup_log,stderr,"startup");
+ system_log=&startup_log.ops;;
+}
+
+/* for the benefit of main, really */
+void logfile_init_file(struct logfile *st, FILE *f);
+
void log_module(dict_t *dict)
{
setlinebuf(stderr);