Added cmd arg handling to set log level
All checks were successful
PR Check / on-push-commit-check (push) Successful in 14m38s
All checks were successful
PR Check / on-push-commit-check (push) Successful in 14m38s
This commit is contained in:
parent
a6c89dee5a
commit
b908baf794
5 changed files with 108 additions and 20 deletions
|
@ -144,7 +144,7 @@ jobs:
|
|||
continue-on-error: true
|
||||
run: |
|
||||
cd ${{ github.workspace }}/build_gcc
|
||||
./larra_xmpp_tests
|
||||
./larra_xmpp_tests --log_level=0
|
||||
|
||||
- name: Clang build (only configuring)
|
||||
id: clang_build
|
||||
|
@ -204,4 +204,4 @@ jobs:
|
|||
# export LLVM_VER=19.1.3
|
||||
# export PATH="/home/LLVM-${LLVM_VER}/bin:${PATH}"
|
||||
# cd ${{ github.workspace }}/build_clang
|
||||
# ASAN_SYMBOLIZER_PATH=llvm-symbolizer ASAN_OPTIONS=detect_stack_use_after_return=1:check_initialization_order=1:detect_leaks=1:atexit=1:abort_on_error=1 ./larra_xmpp_tests
|
||||
# ASAN_SYMBOLIZER_PATH=llvm-symbolizer ASAN_OPTIONS=detect_stack_use_after_return=1:check_initialization_order=1:detect_leaks=1:atexit=1:abort_on_error=1 ./larra_xmpp_tests --log_level=0
|
||||
|
|
6
.vscode/tasks.json
vendored
6
.vscode/tasks.json
vendored
|
@ -193,7 +193,7 @@
|
|||
"command": [
|
||||
"cd ${workspaceFolder} &&",
|
||||
"mkdir -p build_clang && cd build_clang &&",
|
||||
"ASAN_SYMBOLIZER_PATH=llvm-symbolizer ASAN_OPTIONS=detect_stack_use_after_return=1:check_initialization_order=1:detect_leaks=1:atexit=1:abort_on_error=1 ./larra_xmpp_tests ; echo \"exit code: $?\"",
|
||||
"ASAN_SYMBOLIZER_PATH=llvm-symbolizer ASAN_OPTIONS=detect_stack_use_after_return=1:check_initialization_order=1:detect_leaks=1:atexit=1:abort_on_error=1 ./larra_xmpp_tests --log_level=0 ; echo \"exit code: $?\"",
|
||||
],
|
||||
"presentation": {
|
||||
"clear": true
|
||||
|
@ -239,7 +239,7 @@
|
|||
"command": [
|
||||
"cd ${workspaceFolder} &&",
|
||||
"mkdir -p build_clang && cd build_clang &&",
|
||||
"MSAN_SYMBOLIZER_PATH=llvm-symbolizer MSAN_OPTIONS=abort_on_error=1 ./larra_xmpp_tests ; echo \"exit code: $?\"",
|
||||
"MSAN_SYMBOLIZER_PATH=llvm-symbolizer MSAN_OPTIONS=abort_on_error=1 ./larra_xmpp_tests --log_level=0 ; echo \"exit code: $?\"",
|
||||
],
|
||||
"presentation": {
|
||||
"clear": true
|
||||
|
@ -273,7 +273,7 @@
|
|||
"command": [
|
||||
"cd ${workspaceFolder} &&",
|
||||
"mkdir -p build_clang && cd build_clang &&",
|
||||
"MSAN_SYMBOLIZER_PATH=llvm-symbolizer MSAN_OPTIONS=abort_on_error=1 ./larra_xmpp_tests ; echo \"exit code: $?\"",
|
||||
"MSAN_SYMBOLIZER_PATH=llvm-symbolizer MSAN_OPTIONS=abort_on_error=1 ./larra_xmpp_tests --log_level=0 ; echo \"exit code: $?\"",
|
||||
],
|
||||
"presentation": {
|
||||
"clear": true
|
||||
|
|
|
@ -18,7 +18,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
|
|||
set(FMT_MODULE OFF)
|
||||
set(UTEMPL_MODULE OFF)
|
||||
set(CXX_EXTENSIONS NO)
|
||||
set(BOOST_INCLUDE_LIBRARIES "pfr;asio;serialization")
|
||||
set(BOOST_INCLUDE_LIBRARIES "pfr;asio;serialization;program_options")
|
||||
option(CPM_USE_LOCAL_PACKAGES "Use local packages" ON)
|
||||
option(UTEMPL_USE_LOCAL_PACKAGE "Use utempl local package" OFF)
|
||||
option(BUILD_EXECUTABLE ON)
|
||||
|
@ -177,11 +177,11 @@ target_include_directories(larra_xmpp PUBLIC
|
|||
|
||||
if(TARGET Boost::pfr)
|
||||
target_link_libraries(larra_xmpp PUBLIC
|
||||
Boost::asio Boost::serialization utempl::utempl
|
||||
Boost::asio Boost::serialization Boost::program_options utempl::utempl
|
||||
OpenSSL::SSL nameof::nameof fmt::fmt
|
||||
OpenSSL::Crypto spdlog xmlplusplus ${LIBXML2_LIBRARIES})
|
||||
else()
|
||||
find_package(Boost 1.85.0 COMPONENTS serialization REQUIRED)
|
||||
find_package(Boost 1.85.0 COMPONENTS serialization program_options REQUIRED)
|
||||
target_link_libraries(larra_xmpp PUBLIC
|
||||
utempl::utempl ${Boost_LIBRARIES} OpenSSL::SSL
|
||||
nameof::nameof fmt::fmt
|
||||
|
|
|
@ -3,11 +3,28 @@
|
|||
|
||||
#include <boost/asio/co_spawn.hpp>
|
||||
#include <boost/asio/detached.hpp>
|
||||
#include <boost/program_options.hpp>
|
||||
#include <larra/client/client.hpp>
|
||||
#include <larra/presence.hpp>
|
||||
#include <larra/printer_stream.hpp>
|
||||
#include <print>
|
||||
|
||||
// clang-format off
|
||||
constexpr auto ToString(spdlog::level::level_enum e) {
|
||||
switch (e) {
|
||||
case spdlog::level::trace: return "TRACE";
|
||||
case spdlog::level::debug: return "DEBUG";
|
||||
case spdlog::level::info: return "INFO";
|
||||
case spdlog::level::warn: return "WARNING";
|
||||
case spdlog::level::err: return "ERROR";
|
||||
case spdlog::level::critical: return "CRITICAL";
|
||||
case spdlog::level::off: return "OFF";
|
||||
default:
|
||||
return "INVALID";
|
||||
}
|
||||
}
|
||||
// clang-format on
|
||||
|
||||
namespace iq = larra::xmpp::iq;
|
||||
|
||||
auto Coroutine() -> boost::asio::awaitable<void> {
|
||||
|
@ -50,8 +67,39 @@ auto Coroutine() -> boost::asio::awaitable<void> {
|
|||
SPDLOG_INFO("Done connecting client!");
|
||||
}
|
||||
|
||||
auto main() -> int {
|
||||
spdlog::set_level(spdlog::level::trace);
|
||||
namespace po = boost::program_options;
|
||||
|
||||
auto main(int argc, char** argv) -> int {
|
||||
// Define options
|
||||
po::options_description desc("Allowed options");
|
||||
desc.add_options()("help,h", "Print help message")("log_level,l",
|
||||
po::value<int>()->default_value(SPDLOG_LEVEL_INFO),
|
||||
"Set log level: 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF");
|
||||
|
||||
// Parse command-line arguments
|
||||
po::variables_map vm;
|
||||
try {
|
||||
po::store(po::parse_command_line(argc, argv, desc), vm);
|
||||
po::notify(vm);
|
||||
|
||||
if(vm["log_level"].as<int>() < spdlog::level::level_enum::trace || vm["log_level"].as<int>() > spdlog::level::level_enum::off) {
|
||||
throw std::invalid_argument{
|
||||
std::format("Invalid argument value for '--log_level' option. Check option description for more details")};
|
||||
}
|
||||
if(vm["log_level"].as<int>() < SPDLOG_ACTIVE_LEVEL) {
|
||||
SPDLOG_WARN("Specified log_level '{}' is lower than max available one '{}'. Log level will be changed according to the maximum one",
|
||||
vm["log_level"].as<int>(),
|
||||
SPDLOG_ACTIVE_LEVEL);
|
||||
}
|
||||
} catch(const std::exception& e) {
|
||||
SPDLOG_CRITICAL("Cmd parse error: {}", e.what());
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Cmd options handling
|
||||
spdlog::set_level(static_cast<spdlog::level::level_enum>(vm["log_level"].as<int>()));
|
||||
std::println("\nEnvironment setup:\n\tCurrently set log level: {}\n", ToString(spdlog::get_level()));
|
||||
|
||||
boost::asio::io_context io_context;
|
||||
boost::asio::co_spawn(io_context, Coroutine(), boost::asio::detached);
|
||||
io_context.run();
|
||||
|
|
|
@ -1,21 +1,61 @@
|
|||
#include <gtest/gtest.h>
|
||||
#include <spdlog/spdlog.h>
|
||||
|
||||
#include <boost/program_options.hpp>
|
||||
#include <exception>
|
||||
#include <print>
|
||||
#include <utility>
|
||||
#include <stdexcept>
|
||||
|
||||
class PreconfigureEnvironment : public ::testing::Environment {
|
||||
public:
|
||||
void SetUp() override {
|
||||
spdlog::set_level(spdlog::level::trace);
|
||||
std::println("\nPreconfigureEnvironment setup:\n\tCompiled max availabel log level: {}\n\tCurrently set log level: {}",
|
||||
SPDLOG_ACTIVE_LEVEL,
|
||||
std::to_underlying(spdlog::get_level()));
|
||||
// clang-format off
|
||||
constexpr auto ToString(spdlog::level::level_enum e) {
|
||||
switch (e) {
|
||||
case spdlog::level::trace: return "TRACE";
|
||||
case spdlog::level::debug: return "DEBUG";
|
||||
case spdlog::level::info: return "INFO";
|
||||
case spdlog::level::warn: return "WARNING";
|
||||
case spdlog::level::err: return "ERROR";
|
||||
case spdlog::level::critical: return "CRITICAL";
|
||||
case spdlog::level::off: return "OFF";
|
||||
default:
|
||||
return "INVALID";
|
||||
}
|
||||
};
|
||||
}
|
||||
// clang-format on
|
||||
|
||||
namespace po = boost::program_options;
|
||||
|
||||
auto main(int argc, char** argv) -> int {
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
::testing::AddGlobalTestEnvironment(new PreconfigureEnvironment); // NOLINT GTest takes ownership
|
||||
|
||||
// Define options
|
||||
po::options_description desc("Allowed options");
|
||||
desc.add_options()("help,h", "Print help message")("log_level,l",
|
||||
po::value<int>()->default_value(SPDLOG_LEVEL_INFO),
|
||||
"Set log level: 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF");
|
||||
|
||||
// Parse command-line arguments
|
||||
po::variables_map vm;
|
||||
try {
|
||||
po::store(po::parse_command_line(argc, argv, desc), vm);
|
||||
po::notify(vm);
|
||||
|
||||
if(vm["log_level"].as<int>() < spdlog::level::level_enum::trace || vm["log_level"].as<int>() > spdlog::level::level_enum::off) {
|
||||
throw std::invalid_argument{
|
||||
std::format("Invalid argument value for '--log_level' option. Check option description for more details")};
|
||||
}
|
||||
if(vm["log_level"].as<int>() < SPDLOG_ACTIVE_LEVEL) {
|
||||
SPDLOG_WARN("Specified log_level '{}' is lower than max available one '{}'. Log level will be changed according to the maximum one",
|
||||
vm["log_level"].as<int>(),
|
||||
SPDLOG_ACTIVE_LEVEL);
|
||||
}
|
||||
} catch(const std::exception& e) {
|
||||
SPDLOG_CRITICAL("Cmd parse error: {}", e.what());
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Cmd options handling
|
||||
spdlog::set_level(static_cast<spdlog::level::level_enum>(vm["log_level"].as<int>()));
|
||||
std::println("\nEnvironment setup:\n\tCurrently set log level: {}\n", ToString(spdlog::get_level()));
|
||||
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
Loading…
Reference in a new issue