#include #include #include #include #include #include "rpc_server.h" #include "ulog_api.h" #include "log_file.h" #include "log_console.h" #include "log_pty.h" #include "log_remote.h" #include "rpc_module.h" #include "ulog_in.h" #include "sev_sched.h" #define LOG_SCHED_MODULE_NAME "log-sched" #define DEFAULT_CONFIG_FILE "/etc/log-sched.conf" ulog_t *g_log = NULL; FILE *g_conf_fp; char g_conf_file[MAX_PATH_SZ]; typedef ret_code (*initial_cb)(); typedef ret_code (*exit_cb)(); typedef struct _log_opt { char type[20]; initial_cb init_func; exit_cb exit_func; } log_opt_t; log_opt_t g_log_opt[] = { {"console", console_initial, NULL}, {"monitor", pty_initial, pty_exit} }; void signal_exit() { log_sev_exit(); ULOG_DEBUG(g_log, "Receive shutdown signal"); } int main(int argc, char **argv) { int run_daemon = 0; char *options = "d"; int opt; while ((opt = getopt(argc, argv, options)) != -1) { switch (opt) { case 'd': run_daemon = 1; break; } } g_log = ulog_init(LOG_SCHED_MODULE_NAME, !run_daemon); if (g_log == NULL) { fprintf(stderr, "Initiating ulog is failure\n"); return -1; } strcpy(g_conf_file, DEFAULT_CONFIG_FILE); g_conf_fp = fopen(g_conf_file, "a+"); if (g_conf_fp == NULL) { ULOG_ERR(g_log, "Opening configure:%s is failure:%s", g_conf_file, strerror(errno)); goto END; } if (run_daemon) { if (daemon(0, 0) == -1) { ULOG_ERR(g_log, "Setting daemon running is failure:%s", strerror(errno)); goto END; } } /* 各类配置初始化 */ for (int i = 0; i < (sizeof(g_log_opt) / sizeof(log_opt_t)); i++) { if ( NULL != g_log_opt[i].init_func) { g_log_opt[i].init_func(); } } /* 重启syslog */ sev_restart(); rpc_server *server = rpc_server_create_ex(RPC_MODULE_SYSLOG_NAME); if (server == NULL) { ULOG_ERR(g_log, "start server error"); goto END; } if (log_sev_init() != 0) { ULOG_INFO(g_log, "Log service which is initited is failure"); goto END; } ULOG_INFO(g_log, "Log service which is initited is success"); signal(SIGINT, signal_exit); ULOG_INFO(g_log, "Server of log schedule is started"); /* 注册配置处理函数 */ rpc_server_regservice(server, SERVICE_LOG_FILE_NAME, CONF_LOG_FILE_FUNC, rpc_conf_log_file); rpc_server_regservice(server, SERIVCE_LOG_CONSOLE_NAME, CONF_LOG_CONSOLE_FUNC, rpc_conf_log_console); rpc_server_regservice(server, SERVICE_LOG_PTY_NAME, CONF_LOG_PTY_FUNC, rpc_conf_log_pty); rpc_server_regservice(server, SERVICE_LOG_REMOTE_NAME, CONF_LOG_REMOTE_ADD_HOST_FUNC, rpc_conf_log_add_remote); rpc_server_regservice(server, SERVICE_LOG_REMOTE_NAME, CONF_LOG_REMOTE_DEL_HOST_FUNC, rpc_conf_log_del_remote); rpc_server_regservice(server, SERVICE_LOG_REMOTE_NAME, CONF_LOG_REMOTE_LEVEL_FUNC, rpc_conf_log_remote_level); /* log_file_t log = {0}; log.is_compress = LOG_UNCOMPRESS; //LOG_COMPRESS; log.del_over_days = 10; log.level = LOG_DEBUG; rpc_conf_log_file(NULL, &log, sizeof(log), NULL); log_console_t console = {0}; strcpy(console.module_name, "111"); console.level = LOG_DEBUG; console.on = 1; rpc_conf_log_console(NULL, &console, sizeof(console), NULL); log_pty_t tty = {0}; //strcpy(tty.module_name, "111"); tty.level = LOG_DEBUG; tty.on = 1; rpc_conf_log_pty(NULL, &tty, sizeof(tty), NULL); log_remote_host_t remote = {0}; strcpy(remote.host, "192.168.3.11"); remote.rfc = LOG_RFC_5424; remote.port = 514; rpc_conf_log_add_remote(NULL, &remote, sizeof(remote), NULL); log_remote_level_t level; level.level = 5; rpc_conf_log_remote_level(NULL, &level, sizeof(level), NULL); */ sev_loop(); ULOG_INFO(g_log, "%s is shutdown", LOG_SCHED_MODULE_NAME); END: /* 各类配置退出前的收尾 */ for (int i = 0; i < (sizeof(g_log_opt) / sizeof(log_opt_t)); i++) { if ( NULL != g_log_opt[i].exit_func) { g_log_opt[i].exit_func(); } } if (g_conf_fp != NULL) { fclose(g_conf_fp); } ulog_close(g_log); return 0; }