Add config load error log

This commit is contained in:
Nick Peng
2019-01-25 21:00:16 +08:00
parent 0112d12693
commit 71e110748b
4 changed files with 56 additions and 13 deletions

View File

@@ -8,6 +8,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <syslog.h>
#define DEFAULT_DNS_CACHE_SIZE 512 #define DEFAULT_DNS_CACHE_SIZE 512
@@ -707,6 +708,21 @@ struct config_item config_item[] = {
CONF_END(), CONF_END(),
}; };
int conf_printf(const char *file, int lineno, int ret)
{
if (ret == CONF_RET_ERR) {
tlog(TLOG_ERROR, "process config file '%s' failed at line %d.", file, lineno);
syslog(LOG_NOTICE, "process config file '%s' failed at line %d.", file, lineno);
return -1;
} else if (ret == CONF_RET_WARN) {
tlog(TLOG_WARN, "process config file '%s' failed at line %d.", file, lineno);
syslog(LOG_NOTICE, "process config file '%s' failed at line %d.", file, lineno);
return -1;
}
return 0;
}
int config_addtional_file(void *data, int argc, char *argv[]) int config_addtional_file(void *data, int argc, char *argv[])
{ {
char *file_path = argv[1]; char *file_path = argv[1];
@@ -716,7 +732,7 @@ int config_addtional_file(void *data, int argc, char *argv[])
return 0; return 0;
} }
return load_conf(file_path, config_item); return load_conf(file_path, config_item, conf_printf);
} }
int _dns_server_load_conf_init(void) int _dns_server_load_conf_init(void)
@@ -741,7 +757,10 @@ void dns_server_load_exit(void)
int dns_server_load_conf(const char *file) int dns_server_load_conf(const char *file)
{ {
int ret = 0;
_dns_server_load_conf_init(); _dns_server_load_conf_init();
openlog ("smartdns", LOG_CONS | LOG_NDELAY, LOG_LOCAL1);
return load_conf(file, config_item); ret = load_conf(file, config_item, conf_printf);
closelog();
return ret;
} }

View File

@@ -8,6 +8,11 @@
#define CONF_INT_MAX (~(1 << 31)) #define CONF_INT_MAX (~(1 << 31))
#define CONF_INT_MIN (1 << 31) #define CONF_INT_MIN (1 << 31)
#define CONF_RET_OK 0
#define CONF_RET_ERR -1
#define CONF_RET_WARN -2
#define CONF_RET_NOENT -3
struct config_item { struct config_item {
const char *item; const char *item;
int (*item_func)(const char *item, void *data, int argc, char *argv[]); int (*item_func)(const char *item, void *data, int argc, char *argv[]);
@@ -107,9 +112,9 @@ extern int conf_size(const char *item, void *data, int argc, char *argv[]);
* *
*/ */
int load_conf(const char *file, struct config_item items[]); typedef int(conf_error_handler)(const char *file, int lineno, int ret);
int load_conf_get_line_count(void); int load_conf(const char *file, struct config_item items[], conf_error_handler handler);
void load_exit(void); void load_exit(void);

View File

@@ -5,8 +5,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
__thread int line_no;
int conf_custom(const char *item, void *data, int argc, char *argv[]) int conf_custom(const char *item, void *data, int argc, char *argv[])
{ {
struct config_item_custom *item_custom = data; struct config_item_custom *item_custom = data;
@@ -182,12 +180,21 @@ void load_exit(void)
return; return;
} }
int load_conf_get_line_count(void) int load_conf_printf(const char *file, int lineno, int ret)
{ {
return line_no; if (ret != CONF_RET_OK) {
printf("process config file '%s' failed at line %d.", file, lineno);
if (ret == CONF_RET_ERR || ret == CONF_RET_NOENT) {
return -1;
}
return 0;
}
return 0;
} }
int load_conf_file(const char *file, struct config_item *items) int load_conf_file(const char *file, struct config_item *items, conf_error_handler handler)
{ {
FILE *fp = NULL; FILE *fp = NULL;
char line[MAX_LINE_LEN]; char line[MAX_LINE_LEN];
@@ -197,6 +204,13 @@ int load_conf_file(const char *file, struct config_item *items)
int i; int i;
int argc; int argc;
char *argv[1024]; char *argv[1024];
int ret = 0;
int call_ret = 0;
int line_no = 0;
if (handler == NULL) {
handler = load_conf_printf;
}
fp = fopen(file, "r"); fp = fopen(file, "r");
if (fp == NULL) { if (fp == NULL) {
@@ -223,6 +237,7 @@ int load_conf_file(const char *file, struct config_item *items)
for (i = 0;; i++) { for (i = 0;; i++) {
if (items[i].item == NULL) { if (items[i].item == NULL) {
handler(file, line_no, CONF_RET_NOENT);
break; break;
} }
@@ -236,7 +251,9 @@ int load_conf_file(const char *file, struct config_item *items)
conf_getopt_reset(); conf_getopt_reset();
/* call item function */ /* call item function */
if (items[i].item_func(items[i].item, items[i].data, argc, argv) != 0) { call_ret = items[i].item_func(items[i].item, items[i].data, argc, argv);
ret = handler(file, line_no, call_ret);
if (ret != 0) {
conf_getopt_reset(); conf_getopt_reset();
goto errout; goto errout;
} }
@@ -257,7 +274,7 @@ errout:
return -1; return -1;
} }
int load_conf(const char *file, struct config_item items[]) int load_conf(const char *file, struct config_item items[], conf_error_handler handler)
{ {
return load_conf_file(file, items); return load_conf_file(file, items, handler);
} }

View File

@@ -384,6 +384,8 @@ int main(int argc, char *argv[])
} }
if (dns_server_load_conf(config_file) != 0) { if (dns_server_load_conf(config_file) != 0) {
fprintf(stderr, "load config failed.\n");
goto errout;
} }
if (create_pid_file(pid_file) != 0) { if (create_pid_file(pid_file) != 0) {