mirror of
https://github.com/badaix/snapcast.git
synced 2025-05-10 15:46:42 +02:00
Make logsink and filter configurable
This commit is contained in:
parent
ad8332345f
commit
a2311dfbfd
7 changed files with 242 additions and 85 deletions
|
@ -70,9 +70,11 @@ int main(int argc, char* argv[])
|
|||
|
||||
// debug settings
|
||||
OptionParser conf("");
|
||||
conf.add<Value<bool>>("", "logging.debug", "enable debug logging", settings.logging.debug, &settings.logging.debug);
|
||||
conf.add<Value<string>>("", "logging.debug_logfile", "log file name for the debug logs (debug must be enabled)", settings.logging.debug_logfile,
|
||||
&settings.logging.debug_logfile);
|
||||
op.add<Value<string>>("", "logging.sink", "log sink [null,system,stdout,stderr,file:<filename>]", settings.logging.sink, &settings.logging.sink);
|
||||
auto logfilterOption = op.add<Value<string>>(
|
||||
"", "logging.filter",
|
||||
"log filter <tag>:<level>[,<tag>:<level>]* with tag = * or <log tag> and level = [trace,debug,info,notice,warning,error,fatal]",
|
||||
settings.logging.filter);
|
||||
|
||||
// stream settings
|
||||
conf.add<Value<size_t>>("", "stream.port", "Server port", settings.stream.port, &settings.stream.port);
|
||||
|
@ -182,18 +184,42 @@ int main(int argc, char* argv[])
|
|||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
// TODO: AixLog::Log::init<AixLog::SinkNative>("snapserver", AixLog::Severity::trace, AixLog::Type::special);
|
||||
if (settings.logging.debug)
|
||||
settings.logging.filter = logfilterOption->value();
|
||||
if (logfilterOption->is_set())
|
||||
{
|
||||
AixLog::Log::instance().add_logsink<AixLog::SinkCout>(AixLog::Severity::trace, "%Y-%m-%d %H-%M-%S.#ms [#severity] (#tag_func)");
|
||||
if (!settings.logging.debug_logfile.empty())
|
||||
AixLog::Log::instance().add_logsink<AixLog::SinkFile>(AixLog::Severity::trace, settings.logging.debug_logfile,
|
||||
"%Y-%m-%d %H-%M-%S.#ms [#severity] (#tag_func)");
|
||||
for (size_t n = 1; n < logfilterOption->count(); ++n)
|
||||
settings.logging.filter += "," + logfilterOption->value(n);
|
||||
}
|
||||
|
||||
if (settings.logging.sink.empty())
|
||||
{
|
||||
settings.logging.sink = "stdout";
|
||||
#ifdef HAS_DAEMON
|
||||
if (daemonOption->is_set())
|
||||
settings.logging.sink = "system";
|
||||
#endif
|
||||
}
|
||||
AixLog::Filter logfilter;
|
||||
auto filters = utils::string::split(settings.logging.filter, ',');
|
||||
for (const auto& filter : filters)
|
||||
logfilter.add_filter(filter);
|
||||
|
||||
string logformat = "%Y-%m-%d %H-%M-%S.#ms [#severity] (#tag_func)";
|
||||
if (settings.logging.sink.find("file:") != string::npos)
|
||||
{
|
||||
string logfile = settings.logging.sink.substr(settings.logging.sink.find(":") + 1);
|
||||
AixLog::Log::init<AixLog::SinkFile>(logfilter, logfile, logformat);
|
||||
}
|
||||
else if (settings.logging.sink == "stdout")
|
||||
AixLog::Log::init<AixLog::SinkCout>(logfilter, logformat);
|
||||
else if (settings.logging.sink == "stderr")
|
||||
AixLog::Log::init<AixLog::SinkCerr>(logfilter, logformat);
|
||||
else if (settings.logging.sink == "system")
|
||||
AixLog::Log::init<AixLog::SinkNative>("snapclient", logfilter);
|
||||
else if (settings.logging.sink == "null")
|
||||
AixLog::Log::init<AixLog::SinkNull>();
|
||||
else
|
||||
{
|
||||
AixLog::Log::instance().add_logsink<AixLog::SinkCout>(AixLog::Severity::info, "%Y-%m-%d %H-%M-%S [#severity] (#tag_func)");
|
||||
}
|
||||
throw SnapException("Invalid log sink: " + settings.logging.sink);
|
||||
|
||||
for (const auto& opt : conf.unknown_options())
|
||||
LOG(WARNING) << "unknown configuration option: " << opt << "\n";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue