入口:/syslog-ng/main.c
参数解析部分使用glib库作支持,底层循环使用eventfd、eventpoll实现。
初始化完成后,启动线程池分散收到大量日志时的处理过程,以提高工作效率。
int
main(int argc, char *argv[])
{
gint rc;
GOptionContext *ctx;//进行参数解析
GError *error = NULL;
MainLoop *main_loop = main_loop_get_instance();//主循环结构体
z_mem_trace_init("syslog-ng.trace");
g_process_set_argv_space(argc, (gchar **) argv);
setup_caps();
resolved_configurable_paths_init(&resolvedConfigurablePaths);
ctx = g_option_context_new("syslog-ng");
g_process_add_option_group(ctx);
msg_add_option_group(ctx);
g_option_context_add_main_entries(ctx, syslogng_options, NULL);
main_loop_add_options(ctx);
if (!g_option_context_parse(ctx, &argc, &argv, &error))
{
fprintf(stderr, "Error parsing command line arguments: %s\n", error ? error->message : "Invalid arguments");
g_option_context_free(ctx);
return 1;
}
g_option_context_free(ctx);
if (argc > 1)
{
fprintf(stderr, "Excess number of arguments\n");
return 1;
}
if (display_version)
{
interactive_mode();
version();
return 0;
}
if (display_module_registry)
{
interactive_mode();
plugin_list_mod