int main(int argc, char** argv) { long maxcount; GMainLoop* loop; if (argc < 2){ usage(argv[0]); return 1; } maxcount = atoi(argv[1]); cl_log_set_facility(HA_LOG_FACILITY); cl_log_set_uselogd(TRUE); if(!cl_log_test_logd()){ return EXIT_FAIL; } cl_log_set_logd_channel_source(NULL, NULL); g_idle_add(send_log_msg, (gpointer)maxcount); loop = g_main_loop_new(NULL, FALSE); g_main_run(loop); return(1); }
int main(int argc, char** argv, char** envp) { int c; gboolean daemonize = FALSE; gboolean stop_logd = FALSE; gboolean ask_status= FALSE; const char* cfgfile = NULL; pid_t pid; cmdname = argv[0]; while ((c = getopt(argc, argv, "c:dksvh")) != -1){ switch(c){ case 'd': /* daemonize */ daemonize = TRUE; break; case 'k': /* stop */ stop_logd = TRUE; break; case 's': /* status */ ask_status = TRUE; break; case 'c': /* config file*/ cfgfile = optarg; break; case 'v': verbose = TRUE; break; case 'h': /*help message */ default: usage(); exit(1); } } set_ipc_time_debug_flag(FALSE); cl_log_set_uselogd(FALSE); if (!cfgfile && access(DEFAULT_CFG_FILE, F_OK) == 0) { cfgfile = DEFAULT_CFG_FILE; } /* default one set to "logd" * by setting facility, we enable syslog */ cl_log_enable_stderr(TRUE); cl_log_set_entity(logd_config.entity); cl_log_set_facility(logd_config.log_facility); if (ask_status){ long pid; if( (pid = cl_read_pidfile(LOGD_PIDFILE)) > 0 ){ printf("logging daemon is running [pid = %ld].\n", pid); exit(LSB_EXIT_OK); }else{ if (pid == - LSB_STATUS_VAR_PID) { printf("logging daemon is stopped: %s exists.\n" , LOGD_PIDFILE); }else{ printf("logging daemon is stopped.\n"); } } exit(-pid); } if (stop_logd){ logd_stop(); exit(LSB_EXIT_OK); } logd_make_daemon(daemonize); if (ipc_channel_pair(chanspair) != IPC_OK){ cl_perror("cannot create channel pair IPC"); return -1; } if (cfgfile && !parse_config(cfgfile)) { FILE* f; if ((f = fopen(cfgfile, "r")) != NULL){ fclose(f); cl_log(LOG_ERR, "Config file [%s] is incorrect." , cfgfile); exit(LSB_EXIT_NOTCONFIGED); } } if (strlen(logd_config.debugfile) > 0) { cl_log_set_debugfile(logd_config.debugfile); } if (strlen(logd_config.logfile) > 0) { cl_log_set_logfile(logd_config.logfile); } cl_log_set_syslogprefix(logd_config.syslogprefix); cl_log_set_entity(logd_config.entity); cl_log_set_facility(logd_config.log_facility); cl_log(LOG_INFO, "logd started with %s.", cfgfile ? cfgfile : "default configuration"); if (cl_enable_coredumps(TRUE) < 0){ cl_log(LOG_ERR, "enabling core dump failed"); } cl_cdtocoredir(); chanspair[WRITE_PROC_CHAN]->ops->set_recv_qlen(chanspair[WRITE_PROC_CHAN], LOGD_QUEUE_LEN); chanspair[READ_PROC_CHAN]->ops->set_send_qlen(chanspair[READ_PROC_CHAN], LOGD_QUEUE_LEN); if (init_set_proc_title(argc, argv, envp) < 0) { cl_log(LOG_ERR, "Allocation of proc title failed."); return -1; } switch(pid = fork()){ case -1: cl_perror("Can't fork child process!"); return -1; case 0: /*child*/ cl_log_use_buffered_io(1); set_proc_title("ha_logd: write process"); write_msg_process(chanspair[WRITE_PROC_CHAN]); break; default: /*parent*/ set_proc_title("ha_logd: read process"); write_process_pid = pid; /* we don't expect to log anything in the parent. */ cl_log_close_log_files(); read_msg_process(chanspair[READ_PROC_CHAN]); break; } return 0; }
void cl_inherit_logging_environment(int logqueuemax) { char * inherit_env = NULL; /* Donnot need to free the return pointer from getenv */ inherit_env = getenv(ENV_HADEBUGVAL); if (inherit_env != NULL && atoi(inherit_env) != 0 ) { debug_level = atoi(inherit_env); inherit_env = NULL; } inherit_env = getenv(ENV_LOGFENV); if (inherit_env != NULL && *inherit_env != EOS) { cl_log_set_logfile(inherit_env); inherit_env = NULL; } inherit_env = getenv(ENV_DEBUGFENV); if (inherit_env != NULL && *inherit_env != EOS) { cl_log_set_debugfile(inherit_env); inherit_env = NULL; } inherit_env = getenv(ENV_LOGFACILITY); if (inherit_env != NULL && *inherit_env != EOS) { int facility = -1; facility = cl_syslogfac_str2int(inherit_env); if ( facility >= 0 ) { cl_log_set_facility(facility); } inherit_env = NULL; } inherit_env = getenv(ENV_SYSLOGFMT); if (inherit_env != NULL && *inherit_env != EOS) { gboolean truefalse; if (cl_str_to_boolean(inherit_env, &truefalse) == HA_OK) { cl_log_enable_syslog_filefmt(truefalse); } } inherit_env = getenv(ENV_LOGDAEMON); if (inherit_env != NULL && *inherit_env != EOS) { gboolean uselogd; cl_str_to_boolean(inherit_env, &uselogd); cl_log_set_uselogd(uselogd); if (uselogd) { if (logqueuemax > 0) { cl_set_logging_wqueue_maxlen(logqueuemax); } } } inherit_env = getenv(ENV_CONNINTVAL); if (inherit_env != NULL && *inherit_env != EOS) { int logdtime; logdtime = cl_get_msec(inherit_env); cl_log_set_logdtime(logdtime); } inherit_compress(); return; }