This commit is contained in:
Timur A. Fatkhullin 2024-11-12 01:00:22 +03:00
parent 6acc1f94ba
commit 9769c24005
6 changed files with 48 additions and 15 deletions

View File

@ -23,7 +23,7 @@ protected:
std::string _currentPattern;
public:
constexpr static std::string_view LOGGER_DEFAULT_FORMAT = "[%Y-%m-%d %T.%e] [%l]: [%v]";
constexpr static std::string_view LOGGER_DEFAULT_FORMAT = "[%Y-%m-%d %T.%e] [%l]: %v";
template <traits::adc_input_char_range R, typename... BaseCtorArgTs>
AdcSpdlogGenericDecorator(const R& pattern, std::shared_ptr<spdlog::logger> logger, BaseCtorArgTs&&... ctor_args)
@ -161,7 +161,7 @@ protected:
using base_t = AdcSpdlogGenericDecorator<BaseT>;
public:
constexpr static std::array<std::string_view, 2> LOGGER_DEFAULT_FORMAT{"[%Y-%m-%d %T.%e] [%l]: ", "[%v]"};
constexpr static std::array<std::string_view, 2> LOGGER_DEFAULT_FORMAT{"[%Y-%m-%d %T.%e] [%l] ", "%v"};
template <traits::adc_input_char_range R, traits::adc_range_of_input_char_range IR>
static std::string constructPattern(const R& mark, size_t after_idx = 0, const IR& format = LOGGER_DEFAULT_FORMAT)
@ -169,7 +169,9 @@ public:
std::string pattern;
std::ranges::copy(format | std::views::take(after_idx + 1) | std::views::join, std::back_inserter(pattern));
std::ranges::copy(std::string_view("["), std::back_inserter(pattern));
std::ranges::copy(mark, std::back_inserter(pattern));
std::ranges::copy(std::string_view("]: "), std::back_inserter(pattern));
std::ranges::copy(format | std::views::drop(after_idx + 1) | std::views::join, std::back_inserter(pattern));
return pattern;

View File

@ -49,6 +49,12 @@ public:
return std::ranges::size(_byteSequence) == 0;
}
size_t size() const
{
return std::ranges::size(_byteSequence);
}
template <typename T>
requires(traits::adc_char_view<T> && std::ranges::contiguous_range<ByteSeqT>) ||
traits::adc_output_char_range<T>

View File

@ -232,6 +232,13 @@ public:
_recvTimeout(ctx.recvTimeout),
_sendTimeout(ctx.sendTimeout)
{
_serverPtr->logInfo("Create client session with ID = {} (addr = {})", _ident, (void*)this);
}
virtual ~Session()
{
_serverPtr->logInfo("Delete client session with ID = {} (addr = {})", _ident, (void*)this);
}
netsession_ident_t ident() const
@ -241,6 +248,8 @@ public:
void start()
{
_serverPtr->logInfo("Start client session with ID = {} (addr = {})", _ident, (void*)this);
auto self(this->shared_from_this());
_netService.asyncReceive(
@ -281,6 +290,8 @@ public:
void stop()
{
_serverPtr->logInfo("Stop client session with ID = {} (addr = {})", _ident, (void*)this);
_netService.close();
}

View File

@ -223,4 +223,18 @@ concept adc_netsession_proto_c =
};
/* LOGGER */
template <typename LOGGERT>
concept adc_logger_c = requires(LOGGERT log) {
// logging method must accept at least the single argument - formating string
log.logInfo(std::declval<std::string_view>());
log.logInfo(std::declval<std::string_view>(), std::declval<std::string>());
log.logWarn(std::declval<std::string_view>(), std::declval<std::string>());
log.logError(std::declval<std::string_view>(), std::declval<std::string>());
};
} // namespace adc::interfaces

View File

@ -36,7 +36,7 @@ class AdcTrivialLogger
public:
virtual ~AdcTrivialLogger() = default;
protected:
// protected:
static constexpr std::string_view errorLevelMark{"error"};
static constexpr std::string_view warnLevelMark{"warning"};
static constexpr std::string_view infoLevelMark{"info"};
@ -109,6 +109,8 @@ protected:
};
static_assert(interfaces::adc_logger_c<AdcTrivialLogger>, "!!!!!!!!!!!");
// A generic implementation of POSIX OS daemon
class AdcPosixGenericDaemon
{

View File

@ -21,12 +21,11 @@ ABSTRACT DEVICE COMPONENTS LIBRARY
namespace adc::spdlog
{
template <interfaces::adc_generic_netserver_c ServerT>
requires traits::formattable<typename ServerT::server_ident_t>
class AdcGenericNetServerSpdlog : public AdcSpdlogGenericMarkDecorator<ServerT>
template <traits::formattable IdentT = std::string>
class AdcGenericNetServerSpdlog : public AdcSpdlogGenericMarkDecorator<AdcGenericNetServer<IdentT>>
{
protected:
using base_t = AdcSpdlogGenericMarkDecorator<ServerT>;
using base_t = AdcSpdlogGenericMarkDecorator<AdcGenericNetServer<IdentT>>;
std::string _serverID;
@ -36,7 +35,7 @@ protected:
}
public:
using typename ServerT::server_ident_t;
using typename base_t::server_ident_t;
using base_t::logCritical;
using base_t::logDebug;
@ -53,7 +52,7 @@ public:
{
this->logMethodCalling(__PRETTY_FUNCTION__);
fmt::format_to(std::back_inserter(_serverID), "{}", ServerT::_serverIdent);
fmt::format_to(std::back_inserter(_serverID), "{}", base_t::_serverIdent);
this->setPattern(base_t::constructPattern(_serverID));
@ -75,7 +74,7 @@ public:
{
this->logMethodCalling(__PRETTY_FUNCTION__);
return ServerT::ident();
return base_t::ident();
}
template <interfaces::adc_netsession_c SessionT, typename... AcceptorCtorArgTs>
@ -89,7 +88,7 @@ public:
logInfo("Start accepting client connections for server session ID hash: {} ...", std::hash<SessionT>(id));
}
ServerT::start(std::move(id), std::move(sess_ctx), std::forward<AcceptorCtorArgTs>(ctor_args)...);
base_t::start(std::move(id), std::move(sess_ctx), std::forward<AcceptorCtorArgTs>(ctor_args)...);
}
virtual void stop()
@ -98,7 +97,7 @@ public:
logInfo("Stopping network server ...");
ServerT::stop();
base_t::stop();
logInfo("Network server is stopped");
}
@ -109,18 +108,17 @@ public:
{
this->logMethodCalling(__PRETTY_FUNCTION__);
ServerT::_isListening(id);
base_t::_isListening(id);
}
void daemonize()
requires std::derived_from<AdcPosixGenericDaemon, ServerT>
{
this->logMethodCalling(__PRETTY_FUNCTION__);
logInfo("Daemonizing server ...");
ServerT::daemonize();
base_t::daemonize();
logInfo("The server was daemonized");
}