Refactor and rewrite logging facility.
This commit is contained in:
parent
dfe5509412
commit
ebab2d5a8a
99
src/proxy.cc
99
src/proxy.cc
|
@ -125,6 +125,17 @@ void install_signal_handler()
|
||||||
}}.detach();
|
}}.detach();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<spdlog::logger> create_logger(const std::string& name)
|
||||||
|
{
|
||||||
|
auto global_logger{spdlog::get(GLOBAL_LOGGER_NAME)};
|
||||||
|
auto global_sink{global_logger->sinks().front()};
|
||||||
|
|
||||||
|
auto logger{std::make_shared<spdlog::logger>(name, global_sink)};
|
||||||
|
logger->set_level(global_logger->level());
|
||||||
|
|
||||||
|
return logger;
|
||||||
|
}
|
||||||
|
|
||||||
void daemonize_process()
|
void daemonize_process()
|
||||||
{
|
{
|
||||||
auto logger{spdlog::get(GLOBAL_LOGGER_NAME)};
|
auto logger{spdlog::get(GLOBAL_LOGGER_NAME)};
|
||||||
|
@ -220,10 +231,8 @@ void resply_result_to_rslp_data(rslp::Command_Data* data, const resply::Result&
|
||||||
|
|
||||||
class ProtobufAdapter {
|
class ProtobufAdapter {
|
||||||
public:
|
public:
|
||||||
ProtobufAdapter(const std::string& redis_host, asio::io_context& io_context,
|
ProtobufAdapter(const std::string& redis_host, asio::io_context& io_context) :
|
||||||
std::shared_ptr<spdlog::sinks::sink> logsink) :
|
client_{redis_host}, socket_{io_context}, logger_{create_logger(LOGGER_NAME)}
|
||||||
client_{redis_host}, socket_{io_context},
|
|
||||||
logger_{std::make_shared<spdlog::logger>(LOGGER_NAME, logsink)}
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
~ProtobufAdapter()
|
~ProtobufAdapter()
|
||||||
|
@ -335,9 +344,9 @@ private:
|
||||||
|
|
||||||
class ProtobufServer {
|
class ProtobufServer {
|
||||||
public:
|
public:
|
||||||
void start(const Options& options, std::shared_ptr<spdlog::sinks::sink> logsink)
|
void start(const Options& options)
|
||||||
{
|
{
|
||||||
auto logger{std::make_shared<spdlog::logger>(LOGGER_NAME, logsink)};
|
auto logger{create_logger(LOGGER_NAME)};
|
||||||
|
|
||||||
asio::io_context io_context;
|
asio::io_context io_context;
|
||||||
asio::ip::tcp::acceptor acceptor{io_context};
|
asio::ip::tcp::acceptor acceptor{io_context};
|
||||||
|
@ -350,11 +359,11 @@ public:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
logger->info("Started protobuf server on 0.0.0.0:{}", options.protobuf_port);
|
logger->info("Started listening on 0.0.0.0:{}", options.protobuf_port);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
auto server{std::make_shared<ProtobufAdapter>(
|
auto server{std::make_shared<ProtobufAdapter>(
|
||||||
options.remote_host, io_context, logsink
|
options.remote_host, io_context
|
||||||
)};
|
)};
|
||||||
acceptor.accept(server->socket());
|
acceptor.accept(server->socket());
|
||||||
|
|
||||||
|
@ -369,8 +378,8 @@ private:
|
||||||
|
|
||||||
class GrpcAdapter final : public rslp::ProtoAdapter::Service {
|
class GrpcAdapter final : public rslp::ProtoAdapter::Service {
|
||||||
public:
|
public:
|
||||||
GrpcAdapter(const std::string& redis_host, std::shared_ptr<spdlog::sinks::sink> logsink) :
|
GrpcAdapter(const std::string& redis_host) :
|
||||||
client_{redis_host}, logger_{std::make_shared<spdlog::logger>(LOGGER_NAME, logsink)}
|
client_{redis_host}, logger_{create_logger(LOGGER_NAME)}
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void initialize()
|
void initialize()
|
||||||
|
@ -385,7 +394,6 @@ public:
|
||||||
for (const auto& arg: request->data()) {
|
for (const auto& arg: request->data()) {
|
||||||
command.push_back(arg.str());
|
command.push_back(arg.str());
|
||||||
}
|
}
|
||||||
logger_->debug("[{}] execute(): {}", context->peer(), request->ShortDebugString());
|
|
||||||
|
|
||||||
if (command.size()) {
|
if (command.size()) {
|
||||||
std::string name{command.front()};
|
std::string name{command.front()};
|
||||||
|
@ -459,25 +467,22 @@ private:
|
||||||
|
|
||||||
class GrpcServer {
|
class GrpcServer {
|
||||||
public:
|
public:
|
||||||
void start(const Options& options, std::shared_ptr<spdlog::sinks::sink> logsink)
|
void start(const Options& options)
|
||||||
{
|
{
|
||||||
logger_.reset(new spdlog::logger(LOGGER_NAME, logsink));
|
auto logger{create_logger(LOGGER_NAME)};
|
||||||
setup_grpc_logging();
|
setup_grpc_logging();
|
||||||
|
|
||||||
grpc::ServerBuilder builder;
|
grpc::ServerBuilder builder;
|
||||||
builder.AddListeningPort("0.0.0.0:" + options.grpc_port, grpc::InsecureServerCredentials());
|
builder.AddListeningPort("0.0.0.0:" + options.grpc_port, grpc::InsecureServerCredentials());
|
||||||
|
|
||||||
GrpcAdapter adapter{options.remote_host, logsink};
|
GrpcAdapter adapter{options.remote_host};
|
||||||
adapter.initialize();
|
adapter.initialize();
|
||||||
builder.RegisterService(&adapter);
|
builder.RegisterService(&adapter);
|
||||||
|
|
||||||
server_ = builder.BuildAndStart();
|
auto server{builder.BuildAndStart()};
|
||||||
server_->Wait();
|
logger->info("Started listening on 0.0.0.0:{}", options.grpc_port);
|
||||||
}
|
|
||||||
|
|
||||||
void shutdown()
|
server->Wait();
|
||||||
{
|
|
||||||
server_->Shutdown();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -505,48 +510,32 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string LOGGER_NAME{"GrpcServer"};
|
const std::string LOGGER_NAME{"GrpcServer"};
|
||||||
|
|
||||||
std::shared_ptr<spdlog::logger> logger_;
|
|
||||||
std::unique_ptr<grpc::Server> server_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Proxy {
|
class Proxy {
|
||||||
public:
|
public:
|
||||||
Proxy(const Options& options) : options_{options} { }
|
Proxy(const Options& options) :
|
||||||
|
options_{options}, logger_{spdlog::stdout_logger_mt(LOGGER_NAME)} { }
|
||||||
|
|
||||||
void run()
|
void run()
|
||||||
{
|
{
|
||||||
std::shared_ptr<spdlog::sinks::sink> logsink{
|
|
||||||
std::make_shared<spdlog::sinks::ansicolor_stdout_sink_mt>()
|
|
||||||
};
|
|
||||||
logger_.reset(new spdlog::logger(LOGGER_NAME, logsink));
|
|
||||||
spdlog::register_logger(logger_);
|
|
||||||
|
|
||||||
setup_logger();
|
|
||||||
read_config_file();
|
read_config_file();
|
||||||
|
|
||||||
if (options_.daemonize) {
|
if (options_.daemonize) {
|
||||||
logger_->info("Daemonizing server, logfile: {}", options_.log_path);
|
daemonize();
|
||||||
daemonize_process();
|
|
||||||
// The parent process has exited already.
|
|
||||||
|
|
||||||
// Drop the console logger and create a rotating file logger.
|
|
||||||
spdlog::drop(LOGGER_NAME);
|
|
||||||
logsink.reset(new spdlog::sinks::rotating_file_sink_mt(
|
|
||||||
options_.log_path, 1048576 * 10, 10)
|
|
||||||
);
|
|
||||||
logger_.reset(new spdlog::logger(LOGGER_NAME, logsink));
|
|
||||||
|
|
||||||
setup_logger();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options_.verbose) {
|
||||||
|
logger_->info("Setting logging level to verbose.");
|
||||||
|
logger_->set_level(spdlog::level::debug);
|
||||||
|
}
|
||||||
|
|
||||||
ProtobufServer protobuf_server;
|
ProtobufServer protobuf_server;
|
||||||
std::thread{&ProtobufServer::start, &protobuf_server, std::cref(options_), logsink}.detach();
|
std::thread{&ProtobufServer::start, &protobuf_server, std::cref(options_)}.detach();
|
||||||
|
|
||||||
GrpcServer grpc_server;
|
GrpcServer grpc_server;
|
||||||
std::thread{&GrpcServer::start, &grpc_server, std::cref(options_), logsink}.detach();
|
std::thread{&GrpcServer::start, &grpc_server, std::cref(options_)}.detach();
|
||||||
|
|
||||||
for (;;);
|
for (;;);
|
||||||
}
|
}
|
||||||
|
@ -568,22 +557,26 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_logger()
|
void daemonize()
|
||||||
{
|
{
|
||||||
logger_->flush_on(spdlog::level::info);
|
logger_->info("Daemonizing server, logfile: {}", options_.log_path);
|
||||||
|
daemonize_process();
|
||||||
|
// The parent process has exited already.
|
||||||
|
|
||||||
if (options_.verbose) {
|
// Drop the console logger and create a rotating file logger.
|
||||||
logger_->info("Setting logging level to verbose.");
|
spdlog::drop(LOGGER_NAME);
|
||||||
logger_->set_level(spdlog::level::debug);
|
|
||||||
}
|
logger_ = spdlog::rotating_logger_mt(
|
||||||
|
LOGGER_NAME, options_.log_path, 10485760 /* 10MB */, 10 /* files */
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const std::string LOGGER_NAME{GLOBAL_LOGGER_NAME};
|
||||||
|
|
||||||
const Options& options_;
|
const Options& options_;
|
||||||
std::shared_ptr<spdlog::logger> logger_;
|
std::shared_ptr<spdlog::logger> logger_;
|
||||||
json config_;
|
json config_;
|
||||||
|
|
||||||
const std::string LOGGER_NAME{GLOBAL_LOGGER_NAME};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in a new issue