|
|
|
@ -184,6 +184,14 @@ string SrsConfDirective::arg2()
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SrsConfDirective::set_arg0(string value)
|
|
|
|
|
{
|
|
|
|
|
if (args.size() > 0) {
|
|
|
|
|
args[0] = value;
|
|
|
|
|
}
|
|
|
|
|
args.push_back(value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SrsConfDirective* SrsConfDirective::at(int index)
|
|
|
|
|
{
|
|
|
|
|
return directives.at(index);
|
|
|
|
@ -529,38 +537,23 @@ int SrsConfig::reload()
|
|
|
|
|
|
|
|
|
|
// merge config: srs_log_tank
|
|
|
|
|
if (!srs_directive_equals(root->get("srs_log_tank"), old_root->get("srs_log_tank"))) {
|
|
|
|
|
for (it = subscribes.begin(); it != subscribes.end(); ++it) {
|
|
|
|
|
ISrsReloadHandler* subscribe = *it;
|
|
|
|
|
if ((ret = subscribe->on_reload_log_tank()) != ERROR_SUCCESS) {
|
|
|
|
|
srs_error("notify subscribes reload srs_log_tank failed. ret=%d", ret);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
if ((ret = force_reload_log_tank()) != ERROR_SUCCESS) {
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
srs_trace("reload srs_log_tank success.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// merge config: srs_log_level
|
|
|
|
|
if (!srs_directive_equals(root->get("srs_log_level"), old_root->get("srs_log_level"))) {
|
|
|
|
|
for (it = subscribes.begin(); it != subscribes.end(); ++it) {
|
|
|
|
|
ISrsReloadHandler* subscribe = *it;
|
|
|
|
|
if ((ret = subscribe->on_reload_log_level()) != ERROR_SUCCESS) {
|
|
|
|
|
srs_error("notify subscribes reload srs_log_level failed. ret=%d", ret);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
if ((ret = force_reload_log_level()) != ERROR_SUCCESS) {
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
srs_trace("reload srs_log_level success.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// merge config: srs_log_file
|
|
|
|
|
if (!srs_directive_equals(root->get("srs_log_file"), old_root->get("srs_log_file"))) {
|
|
|
|
|
for (it = subscribes.begin(); it != subscribes.end(); ++it) {
|
|
|
|
|
ISrsReloadHandler* subscribe = *it;
|
|
|
|
|
if ((ret = subscribe->on_reload_log_file()) != ERROR_SUCCESS) {
|
|
|
|
|
srs_error("notify subscribes reload srs_log_file failed. ret=%d", ret);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
if ((ret = force_reload_log_file()) != ERROR_SUCCESS) {
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
srs_trace("reload srs_log_file success.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// merge config: pithy_print
|
|
|
|
@ -593,6 +586,117 @@ int SrsConfig::reload()
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SrsConfDirective* SrsConfig::get_or_create(SrsConfDirective* node, string name)
|
|
|
|
|
{
|
|
|
|
|
srs_assert(node);
|
|
|
|
|
|
|
|
|
|
SrsConfDirective* conf = node->get(name);
|
|
|
|
|
|
|
|
|
|
if (!conf) {
|
|
|
|
|
conf = new SrsConfDirective();
|
|
|
|
|
conf->name = name;
|
|
|
|
|
node->directives.push_back(conf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return conf;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SrsConfig::set_log_file(string file)
|
|
|
|
|
{
|
|
|
|
|
if (file == get_log_file()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SrsConfDirective* conf = get_or_create(root, "srs_log_file");
|
|
|
|
|
srs_assert(conf);
|
|
|
|
|
conf->set_arg0(file);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SrsConfig::set_log_tank(string tank)
|
|
|
|
|
{
|
|
|
|
|
if (get_log_tank_file() && tank != "console") {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (!get_log_tank_file() && tank == "console") {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SrsConfDirective* conf = get_or_create(root, "srs_log_tank");
|
|
|
|
|
srs_assert(conf);
|
|
|
|
|
conf->set_arg0(tank);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SrsConfig::set_log_level(string level)
|
|
|
|
|
{
|
|
|
|
|
if (level == get_log_level()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SrsConfDirective* conf = get_or_create(root, "srs_log_level");
|
|
|
|
|
srs_assert(conf);
|
|
|
|
|
conf->set_arg0(level);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int SrsConfig::force_reload_log_file()
|
|
|
|
|
{
|
|
|
|
|
int ret = ERROR_SUCCESS;
|
|
|
|
|
|
|
|
|
|
std::vector<ISrsReloadHandler*>::iterator it;
|
|
|
|
|
|
|
|
|
|
for (it = subscribes.begin(); it != subscribes.end(); ++it) {
|
|
|
|
|
ISrsReloadHandler* subscribe = *it;
|
|
|
|
|
if ((ret = subscribe->on_reload_log_file()) != ERROR_SUCCESS) {
|
|
|
|
|
srs_error("notify subscribes reload srs_log_file failed. ret=%d", ret);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
srs_trace("reload srs_log_file success.");
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int SrsConfig::force_reload_log_tank()
|
|
|
|
|
{
|
|
|
|
|
int ret = ERROR_SUCCESS;
|
|
|
|
|
|
|
|
|
|
std::vector<ISrsReloadHandler*>::iterator it;
|
|
|
|
|
|
|
|
|
|
for (it = subscribes.begin(); it != subscribes.end(); ++it) {
|
|
|
|
|
ISrsReloadHandler* subscribe = *it;
|
|
|
|
|
if ((ret = subscribe->on_reload_log_tank()) != ERROR_SUCCESS) {
|
|
|
|
|
srs_error("notify subscribes reload srs_log_tank failed. ret=%d", ret);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
srs_trace("reload srs_log_tank success.");
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int SrsConfig::force_reload_log_level()
|
|
|
|
|
{
|
|
|
|
|
int ret = ERROR_SUCCESS;
|
|
|
|
|
|
|
|
|
|
std::vector<ISrsReloadHandler*>::iterator it;
|
|
|
|
|
|
|
|
|
|
for (it = subscribes.begin(); it != subscribes.end(); ++it) {
|
|
|
|
|
ISrsReloadHandler* subscribe = *it;
|
|
|
|
|
if ((ret = subscribe->on_reload_log_level()) != ERROR_SUCCESS) {
|
|
|
|
|
srs_error("notify subscribes reload srs_log_level failed. ret=%d", ret);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
srs_trace("reload srs_log_level success.");
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int SrsConfig::reload_http_api(SrsConfDirective* old_root)
|
|
|
|
|
{
|
|
|
|
|
int ret = ERROR_SUCCESS;
|
|
|
|
@ -1171,13 +1275,13 @@ int SrsConfig::parse_file(const char* filename)
|
|
|
|
|
// TODO: check pid.
|
|
|
|
|
|
|
|
|
|
// check log
|
|
|
|
|
std::string log_filename = this->get_srs_log_file();
|
|
|
|
|
if (get_srs_log_tank_file() && log_filename.empty()) {
|
|
|
|
|
std::string log_filename = this->get_log_file();
|
|
|
|
|
if (get_log_tank_file() && log_filename.empty()) {
|
|
|
|
|
ret = ERROR_SYSTEM_CONFIG_INVALID;
|
|
|
|
|
srs_error("must specifies the file to write log to. ret=%d", ret);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
if (get_srs_log_tank_file()) {
|
|
|
|
|
if (get_log_tank_file()) {
|
|
|
|
|
srs_trace("write log to file %s", log_filename.c_str());
|
|
|
|
|
srs_trace("you can: tailf %s", log_filename.c_str());
|
|
|
|
|
srs_trace("@see: %s", SRS_WIKI_URL_LOG);
|
|
|
|
@ -2293,7 +2397,7 @@ string SrsConfig::get_ingest_input_url(SrsConfDirective* ingest)
|
|
|
|
|
return conf->arg0();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string SrsConfig::get_srs_log_file()
|
|
|
|
|
string SrsConfig::get_log_file()
|
|
|
|
|
{
|
|
|
|
|
srs_assert(root);
|
|
|
|
|
|
|
|
|
@ -2317,7 +2421,7 @@ string SrsConfig::get_ffmpeg_log_dir()
|
|
|
|
|
return conf->arg0();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string SrsConfig::get_srs_log_level()
|
|
|
|
|
string SrsConfig::get_log_level()
|
|
|
|
|
{
|
|
|
|
|
srs_assert(root);
|
|
|
|
|
|
|
|
|
@ -2329,7 +2433,7 @@ string SrsConfig::get_srs_log_level()
|
|
|
|
|
return conf->arg0();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SrsConfig::get_srs_log_tank_file()
|
|
|
|
|
bool SrsConfig::get_log_tank_file()
|
|
|
|
|
{
|
|
|
|
|
srs_assert(root);
|
|
|
|
|
|
|
|
|
|