Skip to content
This repository was archived by the owner on Apr 27, 2023. It is now read-only.

Commit 7b766f0

Browse files
committed
Add silent_logging option to silence the c++ logger
1 parent 183678e commit 7b766f0

6 files changed

Lines changed: 82 additions & 0 deletions

File tree

ext/bindings/client.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <ruby/thread.h>
55

66
#include "client.hpp"
7+
#include "logger.hpp"
78
#include "util.hpp"
89

910
namespace pulsar_rb {
@@ -55,6 +56,25 @@ void ClientConfiguration::setLogConfFilePath(const std::string& path) {
5556
_config.setLogConfFilePath(path);
5657
}
5758

59+
void ClientConfiguration::setSilentLogging(bool enable) {
60+
// The logger can only be set once, so if it's already on we cannot disable it.
61+
if (silentLogging) {
62+
if (!enable) {
63+
throw Rice::Exception(rb_eArgError, "silent_logging can only be set once");
64+
}
65+
}
66+
67+
if (enable) {
68+
silentLogging = true;
69+
std::unique_ptr<LoggerFactory> loggerFactory = SilentLoggerFactory::create();
70+
_config.setLogger(loggerFactory.release());
71+
}
72+
}
73+
74+
bool ClientConfiguration::getSilentLogging() {
75+
return silentLogging;
76+
}
77+
5878
bool ClientConfiguration::isUseTls() {
5979
return _config.isUseTls();
6080
}
@@ -175,6 +195,8 @@ void bind_client(Module& module) {
175195
.define_method("concurrent_lookup_requests=", &pulsar_rb::ClientConfiguration::setConcurrentLookupRequest)
176196
.define_method("log_conf_file_path", &pulsar_rb::ClientConfiguration::getLogConfFilePath)
177197
.define_method("log_conf_file_path=", &pulsar_rb::ClientConfiguration::setLogConfFilePath)
198+
.define_method("silent_logging?", &pulsar_rb::ClientConfiguration::getSilentLogging)
199+
.define_method("silent_logging=", &pulsar_rb::ClientConfiguration::setSilentLogging)
178200
.define_method("use_tls?", &pulsar_rb::ClientConfiguration::isUseTls)
179201
.define_method("use_tls=", &pulsar_rb::ClientConfiguration::setUseTls)
180202
.define_method("tls_trust_certs_file_path", &pulsar_rb::ClientConfiguration::getTlsTrustCertsFilePath)

ext/bindings/client.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ namespace pulsar_rb {
1313
class ClientConfiguration {
1414
public:
1515
pulsar::ClientConfiguration _config;
16+
bool silentLogging = false;
1617
ClientConfiguration();
1718

1819
void setAuthFromToken(const std::string &token);
@@ -26,6 +27,8 @@ namespace pulsar_rb {
2627
void setConcurrentLookupRequest(int n);
2728
std::string getLogConfFilePath();
2829
void setLogConfFilePath(const std::string& path);
30+
void setSilentLogging(bool);
31+
bool getSilentLogging();
2932
bool isUseTls();
3033
void setUseTls(bool enable);
3134
std::string getTlsTrustCertsFilePath();

ext/bindings/logger.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include <pulsar/Logger.h>
2+
3+
#include "logger.hpp"
4+
5+
namespace pulsar_rb {
6+
7+
class SilentLogger : public pulsar::Logger {
8+
std::string _logger;
9+
10+
public:
11+
SilentLogger(const std::string &logger) : _logger(logger) {}
12+
13+
bool isEnabled(Level level) { return false; }
14+
void log(Level level, int line, const std::string &message) { }
15+
};
16+
17+
pulsar::Logger *SilentLoggerFactory::getLogger(const std::string& file) { return new SilentLogger(file); }
18+
19+
std::unique_ptr<pulsar::LoggerFactory> SilentLoggerFactory::create() {
20+
return std::unique_ptr<pulsar::LoggerFactory>(new SilentLoggerFactory());
21+
}
22+
23+
}

ext/bindings/logger.hpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#ifndef __PULSAR_RUBY_CLIENT_LOGGER_HPP
2+
#define __PULSAR_RUBY_CLIENT_LOGGER_HPP
3+
4+
#include <pulsar/Logger.h>
5+
6+
namespace pulsar_rb {
7+
8+
class SilentLoggerFactory : public pulsar::LoggerFactory {
9+
public:
10+
pulsar::Logger* getLogger(const std::string& fileName);
11+
12+
static std::unique_ptr<pulsar::LoggerFactory> create();
13+
};
14+
15+
}
16+
17+
#endif

lib/pulsar/client_configuration.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ def populate(config={})
134134
populate_one(config, :message_listener_threads)
135135
populate_one(config, :concurrent_lookup_requests)
136136
populate_one(config, :log_conf_file_path)
137+
populate_one(config, :silent_logging)
137138
populate_one(config, :use_tls)
138139
populate_one(config, :tls_trust_certs_file_path)
139140
populate_one(config, :tls_allow_insecure_connection)

spec/pulsar/client_configuration_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,22 @@
168168
test_config.unlink
169169
end
170170
end
171+
172+
describe "silent logging" do
173+
it "is off by default" do
174+
expect(Pulsar::ClientConfiguration.new.silent_logging?).to eq(false)
175+
end
176+
177+
it "can be enabled" do
178+
expect(Pulsar::ClientConfiguration.from({silent_logging: true}).silent_logging?).to eq(true)
179+
end
180+
181+
it "raises when set twice" do
182+
expect {
183+
Pulsar::ClientConfiguration.from({silent_logging: true}).silent_logging = false
184+
}.to raise_error(ArgumentError, /silent_logging can only be set once/)
185+
end
186+
end
171187
end
172188

173189
def create_temp_config(content)

0 commit comments

Comments
 (0)