Skip to content

Commit

Permalink
Make logsink and filter configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
badaix committed Apr 18, 2020
1 parent ad83323 commit a2311df
Show file tree
Hide file tree
Showing 7 changed files with 240 additions and 83 deletions.
8 changes: 4 additions & 4 deletions client/client_settings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,18 @@ struct ClientSettings
SharingMode sharing_mode{SharingMode::shared};
};

struct LoggingSettings
struct Logging
{
bool debug{false};
std::string debug_logfile{""};
std::string sink{""};
std::string filter{"*:info"};
};

size_t instance{1};
std::string host_id;

ServerSettings server;
PlayerSettings player;
LoggingSettings logging;
Logging logging;
};

#endif
47 changes: 37 additions & 10 deletions client/snapclient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,10 @@ int main(int argc, char** argv)
OptionParser op("Allowed options");
auto helpSwitch = op.add<Switch>("", "help", "produce help message");
auto groffSwitch = op.add<Switch, Attribute::hidden>("", "groff", "produce groff message");
auto debugOption = op.add<Implicit<string>, Attribute::hidden>("", "debug", "enable debug logging", ""); // TODO: &settings.logging.debug);
op.add<Value<string>>("", "logsink", "log sink [null,system,stdout,stderr,file:<filename>]", settings.logging.sink, &settings.logging.sink);
auto logfilterOption = op.add<Value<string>>(
"", "logfilter", "log filter <tag>:<level>[,<tag>:<level>]* with tag = * or <log tag> and level = [trace,debug,info,notice,warning,error,fatal]",
settings.logging.filter);
auto versionSwitch = op.add<Switch>("v", "version", "show version number");
#if defined(HAS_ALSA) || defined(WINDOWS)
auto listSwitch = op.add<Switch>("l", "list", "list PCM devices");
Expand Down Expand Up @@ -175,18 +178,42 @@ int main(int argc, char** argv)

// XXX: Only one metadata option must be set

// TODO: AixLog::Log::init<AixLog::SinkNative>("snapclient", AixLog::Severity::trace, AixLog::Type::special);
if (debugOption->is_set())
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 (!debugOption->value().empty())
AixLog::Log::instance().add_logsink<AixLog::SinkFile>(AixLog::Severity::trace, debugOption->value(),
"%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);
}
else

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)
{
AixLog::Log::instance().add_logsink<AixLog::SinkCout>(AixLog::Severity::info, "%Y-%m-%d %H-%M-%S [#severity] (#tag_func)");
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
throw SnapException("Invalid log sink: " + settings.logging.sink);

#ifdef HAS_DAEMON
std::unique_ptr<Daemon> daemon;
Expand Down Expand Up @@ -311,7 +338,7 @@ int main(int argc, char** argv)
}
catch (const std::exception& e)
{
LOG(ERROR) << "Exception: " << e.what() << std::endl;
LOG(FATAL) << "Exception: " << e.what() << std::endl;
exitcode = EXIT_FAILURE;
}

Expand Down
4 changes: 2 additions & 2 deletions client/stream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -480,8 +480,8 @@ bool Stream::getPlayerChunk(void* outputBuffer, const cs::usec& outputBufferDacT
lastUpdate_ = now;
median_ = buffer_.median();
shortMedian_ = shortBuffer_.median();
LOG(INFO, LOG_TAG) << "Chunk: " << age.count() / 100 << "\t" << miniBuffer_.median() / 100 << "\t" << shortMedian_ / 100 << "\t" << median_ / 100
<< "\t" << buffer_.size() << "\t" << cs::duration<cs::msec>(outputBufferDacTime) << "\t" << frame_delta_ << "\n";
LOG(DEBUG, "Stats") << "Chunk: " << age.count() / 100 << "\t" << miniBuffer_.median() / 100 << "\t" << shortMedian_ / 100 << "\t" << median_ / 100
<< "\t" << buffer_.size() << "\t" << cs::duration<cs::msec>(outputBufferDacTime) << "\t" << frame_delta_ << "\n";
frame_delta_ = 0;
}
return (abs(cs::duration<cs::msec>(age)) < 500);
Expand Down
Loading

0 comments on commit a2311df

Please sign in to comment.