END_TEST #ifdef HAVE_PARSE_PRINTF_FORMAT /** * Test parsing additional format strings, that are only supported if * we're under glibc. */ START_TEST (test_positional_params) { char *msg; struct json_object *jo; ul_openlog ("umberlog/test_positional_params", 0, LOG_LOCAL0); #define COMPLEX_FORMAT \ "%3$*5$.*2$hhd , %1$Lf , %4$.3s , %4$s", 1.0L, 5, (char)100, "prefix", -8 #define COMPLEX_RESULT "00100 , 1.000000 , pre , prefix" msg = ul_format (LOG_DEBUG, COMPLEX_FORMAT, "simple1", "value1", "complex", COMPLEX_FORMAT, "simple2", "value2", NULL); jo = parse_msg (msg); free (msg); verify_value (jo, "msg", COMPLEX_RESULT); verify_value (jo, "simple1", "value1"); verify_value (jo, "complex", COMPLEX_RESULT); verify_value (jo, "simple2", "value2"); json_object_put (jo); ul_closelog (); }
int globalInit() { g_pConf = &gConf; if (0 != loadConfig(CONF_PATH, CONF_FILENAME)) { ul_writelog(UL_LOG_FATAL, "Can not load config path=%s,fileName=%s", CONF_PATH, CONF_FILENAME); return -1; } logstat.events = g_pConf->iLogLevel; // 打开日志文件,打开之后正常日志默认写入diffPro.log文件中,错误日志写入diffPro.log.wf if (0 != ul_openlog(g_pConf->pLogPath, g_pConf->pLogFilename, &logstat, 1024)) { fprintf(stderr, "Fail to open log,path=%s,filename=%s", g_pConf->pLogPath, g_pConf->pLogFilename); return -1; } // 根据词表文件大小获取:开辟进程数和split词表文件时的时间戳。 if (getExtraArgs() != 0) { return -1; } return 0; }
END_TEST /** * Test that using ul_openlog() does work, and sets up the program * identity appropriately. */ START_TEST (test_ul_openlog) { char *msg; struct json_object *jo; char host[_POSIX_HOST_NAME_MAX + 1]; ul_openlog ("umberlog/test_ul_openlog", 0, LOG_LOCAL0); msg = ul_format (LOG_DEBUG, "hello, I'm %s!", __FUNCTION__, NULL); jo = parse_msg (msg); free (msg); gethostname (host, _POSIX_HOST_NAME_MAX); verify_value (jo, "msg", "hello, I'm test_ul_openlog!"); verify_value (jo, "facility", "local0"); verify_value (jo, "priority", "debug"); verify_value (jo, "program", "umberlog/test_ul_openlog"); verify_value_exists (jo, "pid"); verify_value_exists (jo, "uid"); verify_value_exists (jo, "gid"); verify_value_exists (jo, "timestamp"); verify_value (jo, "host", host); json_object_put (jo); ul_closelog (); }
END_TEST /** * Test that discovering priorities work, and the implicit pid * overrides the explicit one. */ START_TEST (test_discover_priority) { char *msg, *pid; struct json_object *jo; ul_openlog ("umberlog/test_discover_priority", 0, LOG_LOCAL0); ul_set_log_flags (LOG_UL_ALL); msg = ul_format (LOG_DEBUG, "testing 1, 2, 3...", "pid", "%d", getpid () + 42, NULL); jo = parse_msg (msg); free (msg); verify_value (jo, "msg", "testing 1, 2, 3..."); if (asprintf (&pid, "%d", getpid ()) == -1) abort (); verify_value (jo, "pid", pid); free (pid); json_object_put (jo); ul_closelog (); }
END_TEST /** * Test adding additional fields. */ START_TEST (test_additional_fields) { char *msg; struct json_object *jo; ul_openlog ("umberlog/test_additional_fields", 0, LOG_LOCAL0); msg = ul_format (LOG_DEBUG, "testing 1, 2, 3...", "random_number", "%d", 42, "random_string", "fourty-two", NULL); jo = parse_msg (msg); free (msg); verify_value (jo, "msg", "testing 1, 2, 3..."); verify_value (jo, "random_number", "42"); verify_value (jo, "random_string", "fourty-two"); json_object_put (jo); ul_closelog (); }
END_TEST /** * Test turning off the timestamp. */ START_TEST (test_no_timestamp) { char *msg; struct json_object *jo; ul_openlog ("umberlog/test_no_timestamp", 0, LOG_LOCAL0); ul_set_log_flags (LOG_UL_NOTIME); msg = ul_format (LOG_DEBUG, "hello, I'm %s!", __FUNCTION__, NULL); jo = parse_msg (msg); free (msg); verify_value (jo, "msg", "hello, I'm test_no_timestamp!"); verify_value (jo, "facility", "local0"); verify_value (jo, "priority", "debug"); verify_value (jo, "program", "umberlog/test_no_timestamp"); verify_value_exists (jo, "pid"); verify_value_exists (jo, "uid"); verify_value_exists (jo, "gid"); verify_value_missing (jo, "timestamp"); verify_value_exists (jo, "host"); json_object_put (jo); ul_closelog (); }
END_TEST /** * Test that setting LOG_UL_NOIMPLICIT will, indeed, turn off * automatically discovered fields. */ START_TEST (test_no_implicit) { char *msg; struct json_object *jo; ul_openlog ("umberlog/test_no_implicit", 0, LOG_LOCAL0); ul_set_log_flags (LOG_UL_NOIMPLICIT); msg = ul_format (LOG_DEBUG, "hello, I'm %s!", __FUNCTION__, NULL); jo = parse_msg (msg); free (msg); verify_value (jo, "msg", "hello, I'm test_no_implicit!"); verify_value_missing (jo, "facility"); verify_value_missing (jo, "priority"); verify_value_missing (jo, "program"); verify_value_missing (jo, "pid"); verify_value_missing (jo, "uid"); verify_value_missing (jo, "gid"); verify_value_missing (jo, "host"); verify_value_missing (jo, "timestamp"); json_object_put (jo); ul_closelog (); }
END_TEST /** * Test that ul_openlog() will ignore any LOG_UL_* flags. */ START_TEST (test_ul_openlog_flag_ignore) { char *msg; struct json_object *jo; ul_openlog ("umberlog/test_ul_openlog_flag_ignore", LOG_UL_NOIMPLICIT, LOG_LOCAL0); msg = ul_format (LOG_DEBUG, "hello, I'm %s!", __FUNCTION__, NULL); jo = parse_msg (msg); free (msg); verify_value_exists (jo, "pid"); verify_value_exists (jo, "uid"); verify_value_exists (jo, "gid"); verify_value_exists (jo, "host"); json_object_put (jo); ul_closelog (); }
END_TEST /** * Test that closelog() does not clear the previous flag settings. */ START_TEST (test_closelog) { char *msg; struct json_object *jo; ul_openlog ("umberlog/test_closelog", 0, LOG_LOCAL0); ul_set_log_flags (LOG_UL_NOIMPLICIT); ul_closelog (); msg = ul_format (LOG_DEBUG, "%s", __FUNCTION__, NULL); jo = parse_msg (msg); free (msg); verify_value_missing (jo, "facility"); json_object_put (jo); ul_openlog ("umberlog/test_closelog", 0, LOG_LOCAL0); ul_closelog (); msg = ul_format (LOG_DEBUG, "%s", __FUNCTION__, NULL); jo = parse_msg (msg); free (msg); verify_value_missing (jo, "facility"); verify_value_missing (jo, "program"); verify_value_missing (jo, "pid"); verify_value_missing (jo, "uid"); verify_value_missing (jo, "gid"); verify_value_missing (jo, "host"); json_object_put (jo); }
int main(int argc,char** argv) { int ret = 0; das_lib::conf_t conf; FLAGS_flagfile="./conf/startup/gflags.conf"; ret = google::ParseCommandLineFlags(&argc, &argv, true); if (ret < 0) { DL_LOG_FATAL("Fail to parse flags"); return -1; } ul_logstat_t ls; ls.spec = FLAGS_log_to_screen ? UL_LOGTTY : 0; ls.to_syslog = 15; ls.events = 15; if (ul_openlog("./log", FLAGS_log_prefix_name.c_str(), &ls, 100) < 0) { DL_LOG_FATAL("Fail to open log"); } if (ret < 0) { DL_LOG_FATAL ("Fail to load_conf!"); return -1; } mrf::ConfigureService &cs = *mrf::GlobalConfigureService::instance(); if (!cs.load("./conf/startup/bs.conf")) { return -1; } ret = conf.bdlib.init(cs["lib_conf"]); if (! ret ) { DL_LOG_FATAL ("Fail to init bdlib!"); return -1; } DL_LOG_TRACE("Create inc thread"); inc_run(&conf); ul_closelog(0); return 0; }
END_TEST /** * Test for correct JSON escaping. */ START_TEST (test_json_escape) { static const char control_chars[] = "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" "\x20"; char *msg; struct json_object *jo; ul_openlog ("umberlog/test_json_escape", 0, LOG_LOCAL0); msg = ul_format (LOG_DEBUG, "%s", __FUNCTION__, "quotes", "Hi, \"quoted value\" speaking!", "\"really\"", "yeah", "control", "foo\nbar", "utf8", "Árvíztűrő tükörfúrógép", "junk", "\013foo", "all_control", control_chars, NULL); jo = parse_msg (msg); free (msg); verify_value (jo, "quotes", "Hi, \"quoted value\" speaking!"); verify_value (jo, "\"really\"", "yeah"); verify_value (jo, "control", "foo\nbar"); verify_value (jo, "utf8", "Árvíztűrő tükörfúrógép"); verify_value (jo, "junk", "\013foo"); verify_value (jo, "all_control", control_chars); json_object_put (jo); ul_closelog (); }