int log_init(char *program_name, int size) { logdbg(stderr,"enter log_init\n"); log_name = program_name; if (log_daemon) { struct sigaction sa_old; struct sigaction sa_new; pid_t pid; openlog(log_name, 0, LOG_DAEMON); setlogmask (LOG_UPTO (LOG_DEBUG)); if (logarea_init(size)) { syslog(LOG_ERR, "logarea init failed"); return -1; } pid = fork(); if (pid < 0) { syslog(LOG_ERR, "starting logger failed"); exit(1); } else if (pid) { syslog(LOG_WARNING, "iSCSI logger with pid=%d started!", pid); return pid; } daemon_init(); /* flush on daemon's crash */ sa_new.sa_handler = (void*)catch_signal; sigemptyset(&sa_new.sa_mask); sa_new.sa_flags = 0; sigaction(SIGSEGV, &sa_new, &sa_old ); sigaction(SIGTERM, &sa_new, &sa_old ); while(1) { log_flush(); sleep(1); if (log_stop_daemon) break; } __log_close(); exit(0); } return 0; }
int log_init(char *program_name, int size, int daemon, int debug) { is_daemon = daemon; is_debug = debug; logdbg(stderr,"enter log_init\n"); log_name = program_name; if (is_daemon) { struct sigaction sa_old; struct sigaction sa_new; pid_t pid; openlog(log_name, 0, LOG_DAEMON); setlogmask (LOG_UPTO (LOG_DEBUG)); if (logarea_init(size)) return 1; pid = fork(); if (pid < 0) { syslog(LOG_ERR, "starting logger failed\n"); exit(1); } else if (pid) { syslog(LOG_WARNING, "Target daemon logger with pid=%d started!\n", pid); return 0; } /* flush on daemon's crash */ sa_new.sa_handler = (void*)log_flush; sigemptyset(&sa_new.sa_mask); sa_new.sa_flags = 0; sigaction(SIGSEGV, &sa_new, &sa_old ); while(1) { log_flush(); sleep(1); } exit(0); } return 0; }