Added cmd arg handling to set log level
All checks were successful
PR Check / on-push-commit-check (push) Successful in 16m4s
All checks were successful
PR Check / on-push-commit-check (push) Successful in 16m4s
This commit is contained in:
parent
36fdeebff5
commit
88609274ba
5 changed files with 114 additions and 32 deletions
|
@ -134,8 +134,8 @@ jobs:
|
||||||
-GNinja -DCMAKE_BUILD_TYPE=Release \
|
-GNinja -DCMAKE_BUILD_TYPE=Release \
|
||||||
-DENABLE_EXAMPLES=ON \
|
-DENABLE_EXAMPLES=ON \
|
||||||
-DENABLE_TESTS=ON \
|
-DENABLE_TESTS=ON \
|
||||||
-DLOG_LEVEL=0 \
|
-DMAX_LOG_LEVEL=0 \
|
||||||
-DTEST_LOG_LEVEL=0 \
|
-DTEST_MAX_LOG_LEVEL=0 \
|
||||||
-DCMAKE_CXX_FLAGS="-ftemplate-backtrace-limit=0"
|
-DCMAKE_CXX_FLAGS="-ftemplate-backtrace-limit=0"
|
||||||
cmake --build ${{ github.workspace }}/build_gcc --parallel `nproc`
|
cmake --build ${{ github.workspace }}/build_gcc --parallel `nproc`
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ jobs:
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
run: |
|
run: |
|
||||||
cd ${{ github.workspace }}/build_gcc
|
cd ${{ github.workspace }}/build_gcc
|
||||||
./larra_xmpp_tests
|
./larra_xmpp_tests --log_level=0
|
||||||
|
|
||||||
- name: Clang build (only configuring)
|
- name: Clang build (only configuring)
|
||||||
id: clang_build
|
id: clang_build
|
||||||
|
@ -162,8 +162,8 @@ jobs:
|
||||||
-GNinja -DCMAKE_BUILD_TYPE=Release \
|
-GNinja -DCMAKE_BUILD_TYPE=Release \
|
||||||
-DENABLE_EXAMPLES=ON \
|
-DENABLE_EXAMPLES=ON \
|
||||||
-DENABLE_TESTS=ON \
|
-DENABLE_TESTS=ON \
|
||||||
-DLOG_LEVEL=0 \
|
-DMAX_LOG_LEVEL=0 \
|
||||||
-DTEST_LOG_LEVEL=0 \
|
-DTEST_MAX_LOG_LEVEL=0 \
|
||||||
-DCMAKE_CXX_FLAGS="-stdlib=libc++ -I/home/LLVM-${LLVM_VER}/include/c++/v1 -fno-modules"
|
-DCMAKE_CXX_FLAGS="-stdlib=libc++ -I/home/LLVM-${LLVM_VER}/include/c++/v1 -fno-modules"
|
||||||
|
|
||||||
echo "::group::compile_commands.json content"
|
echo "::group::compile_commands.json content"
|
||||||
|
|
6
.vscode/launch.json
vendored
6
.vscode/launch.json
vendored
|
@ -9,7 +9,10 @@
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "Debug: connect",
|
"name": "Debug: connect",
|
||||||
"program": "${workspaceFolder}/build/examples/output/connect",
|
"program": "${workspaceFolder}/build/examples/output/connect",
|
||||||
"args": [],
|
"args": [
|
||||||
|
"--log_level=0"
|
||||||
|
// --gtest_filter=POSTIVE_PATTERNS[-NEGATIVE_PATTERNS]
|
||||||
|
],
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}",
|
||||||
"preLaunchTask": "GCC: Build"
|
"preLaunchTask": "GCC: Build"
|
||||||
},
|
},
|
||||||
|
@ -19,6 +22,7 @@
|
||||||
"name": "Debug: tests",
|
"name": "Debug: tests",
|
||||||
"program": "${workspaceFolder}/build/larra_xmpp_tests",
|
"program": "${workspaceFolder}/build/larra_xmpp_tests",
|
||||||
"args": [
|
"args": [
|
||||||
|
"--log_level=0"
|
||||||
// --gtest_filter=POSTIVE_PATTERNS[-NEGATIVE_PATTERNS]
|
// --gtest_filter=POSTIVE_PATTERNS[-NEGATIVE_PATTERNS]
|
||||||
// "--gtest_filter=Roster*"
|
// "--gtest_filter=Roster*"
|
||||||
],
|
],
|
||||||
|
|
|
@ -18,12 +18,12 @@ set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
set(FMT_MODULE OFF)
|
set(FMT_MODULE OFF)
|
||||||
set(UTEMPL_MODULE OFF)
|
set(UTEMPL_MODULE OFF)
|
||||||
set(CXX_EXTENSIONS NO)
|
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(CPM_USE_LOCAL_PACKAGES "Use local packages" ON)
|
||||||
option(UTEMPL_USE_LOCAL_PACKAGE "Use utempl local package" OFF)
|
option(UTEMPL_USE_LOCAL_PACKAGE "Use utempl local package" OFF)
|
||||||
option(BUILD_EXECUTABLE ON)
|
option(BUILD_EXECUTABLE ON)
|
||||||
set(LOG_LEVEL 2 CACHE STRING "Available log levels: 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF")
|
set(MAX_LOG_LEVEL 2 CACHE STRING "Available log levels: 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF")
|
||||||
set(TEST_LOG_LEVEL 2 CACHE STRING "Available log levels: 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF")
|
set(TEST_MAX_LOG_LEVEL 2 CACHE STRING "Available log levels: 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF")
|
||||||
set(UTEMPL_URL
|
set(UTEMPL_URL
|
||||||
"https://sha512sum.xyz/git/sha512sum/utempl"
|
"https://sha512sum.xyz/git/sha512sum/utempl"
|
||||||
CACHE STRING "utempl repository URL")
|
CACHE STRING "utempl repository URL")
|
||||||
|
@ -177,11 +177,11 @@ target_include_directories(larra_xmpp PUBLIC
|
||||||
|
|
||||||
if(TARGET Boost::pfr)
|
if(TARGET Boost::pfr)
|
||||||
target_link_libraries(larra_xmpp PUBLIC
|
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::SSL nameof::nameof fmt::fmt
|
||||||
OpenSSL::Crypto spdlog xmlplusplus ${LIBXML2_LIBRARIES})
|
OpenSSL::Crypto spdlog xmlplusplus ${LIBXML2_LIBRARIES})
|
||||||
else()
|
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
|
target_link_libraries(larra_xmpp PUBLIC
|
||||||
utempl::utempl ${Boost_LIBRARIES} OpenSSL::SSL
|
utempl::utempl ${Boost_LIBRARIES} OpenSSL::SSL
|
||||||
nameof::nameof fmt::fmt
|
nameof::nameof fmt::fmt
|
||||||
|
@ -261,7 +261,7 @@ if(ENABLE_TESTS)
|
||||||
target_sources(larra_xmpp_tests PUBLIC ${SOURCES})
|
target_sources(larra_xmpp_tests PUBLIC ${SOURCES})
|
||||||
target_link_libraries(larra_xmpp_tests GTest::gtest_main
|
target_link_libraries(larra_xmpp_tests GTest::gtest_main
|
||||||
larra_xmpp)
|
larra_xmpp)
|
||||||
target_compile_definitions(larra_xmpp_tests PRIVATE SPDLOG_ACTIVE_LEVEL=${TEST_LOG_LEVEL})
|
target_compile_definitions(larra_xmpp_tests PRIVATE SPDLOG_ACTIVE_LEVEL=${TEST_MAX_LOG_LEVEL})
|
||||||
set_property(TARGET larra_xmpp_tests PROPERTY CXX_STANDARD 23)
|
set_property(TARGET larra_xmpp_tests PROPERTY CXX_STANDARD 23)
|
||||||
include(GoogleTest)
|
include(GoogleTest)
|
||||||
gtest_discover_tests(larra_xmpp_tests)
|
gtest_discover_tests(larra_xmpp_tests)
|
||||||
|
@ -273,7 +273,7 @@ if(ENABLE_EXAMPLES)
|
||||||
get_filename_component(EXAMPLE_NAME ${EXAMPLE_SRC} NAME_WE)
|
get_filename_component(EXAMPLE_NAME ${EXAMPLE_SRC} NAME_WE)
|
||||||
add_executable(${EXAMPLE_NAME} ${EXAMPLE_SRC})
|
add_executable(${EXAMPLE_NAME} ${EXAMPLE_SRC})
|
||||||
target_link_libraries(${EXAMPLE_NAME} larra_xmpp)
|
target_link_libraries(${EXAMPLE_NAME} larra_xmpp)
|
||||||
target_compile_definitions(${EXAMPLE_NAME} PRIVATE SPDLOG_ACTIVE_LEVEL=${TEST_LOG_LEVEL})
|
target_compile_definitions(${EXAMPLE_NAME} PRIVATE SPDLOG_ACTIVE_LEVEL=${TEST_MAX_LOG_LEVEL})
|
||||||
set_property(TARGET ${EXAMPLE_NAME} PROPERTY CXX_STANDARD 23)
|
set_property(TARGET ${EXAMPLE_NAME} PROPERTY CXX_STANDARD 23)
|
||||||
set_target_properties(${EXAMPLE_NAME} PROPERTIES
|
set_target_properties(${EXAMPLE_NAME} PROPERTIES
|
||||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/examples/output")
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/examples/output")
|
||||||
|
|
|
@ -3,11 +3,28 @@
|
||||||
|
|
||||||
#include <boost/asio/co_spawn.hpp>
|
#include <boost/asio/co_spawn.hpp>
|
||||||
#include <boost/asio/detached.hpp>
|
#include <boost/asio/detached.hpp>
|
||||||
|
#include <boost/program_options.hpp>
|
||||||
#include <larra/client/client.hpp>
|
#include <larra/client/client.hpp>
|
||||||
#include <larra/presence.hpp>
|
#include <larra/presence.hpp>
|
||||||
#include <larra/printer_stream.hpp>
|
#include <larra/printer_stream.hpp>
|
||||||
#include <print>
|
#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;
|
namespace iq = larra::xmpp::iq;
|
||||||
|
|
||||||
auto Coroutine() -> boost::asio::awaitable<void> {
|
auto Coroutine() -> boost::asio::awaitable<void> {
|
||||||
|
@ -50,16 +67,38 @@ auto Coroutine() -> boost::asio::awaitable<void> {
|
||||||
SPDLOG_INFO("Done connecting client!");
|
SPDLOG_INFO("Done connecting client!");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto main() -> int {
|
namespace po = boost::program_options;
|
||||||
spdlog::set_level(spdlog::level::trace);
|
|
||||||
|
|
||||||
#ifdef SPDLOG_ACTIVE_LEVEL
|
auto main(int argc, char** argv) -> int {
|
||||||
std::println("\n\tCompiled max available log level: {}\n\tCurrently set log level: {}",
|
// Define options
|
||||||
SPDLOG_ACTIVE_LEVEL,
|
po::options_description desc("Allowed options");
|
||||||
std::to_underlying(spdlog::get_level()));
|
desc.add_options()("help,h", "Print help message")("log_level,l",
|
||||||
#else
|
po::value<int>()->default_value(SPDLOG_LEVEL_INFO),
|
||||||
std::println("\n\tCurrently set log level: {}", std::to_underlying(spdlog::get_level()));
|
"Set log level: 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF");
|
||||||
#endif
|
|
||||||
|
// 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 po::error& 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::io_context io_context;
|
||||||
boost::asio::co_spawn(io_context, Coroutine(), boost::asio::detached);
|
boost::asio::co_spawn(io_context, Coroutine(), boost::asio::detached);
|
||||||
|
|
|
@ -1,21 +1,60 @@
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <spdlog/spdlog.h>
|
#include <spdlog/spdlog.h>
|
||||||
|
|
||||||
|
#include <boost/program_options.hpp>
|
||||||
#include <print>
|
#include <print>
|
||||||
#include <utility>
|
#include <stdexcept>
|
||||||
|
|
||||||
class PreconfigureEnvironment : public ::testing::Environment {
|
// clang-format off
|
||||||
public:
|
constexpr auto ToString(spdlog::level::level_enum e) {
|
||||||
void SetUp() override {
|
switch (e) {
|
||||||
spdlog::set_level(spdlog::level::trace);
|
case spdlog::level::trace: return "TRACE";
|
||||||
std::println("\nPreconfigureEnvironment setup:\n\tCompiled max availabel log level: {}\n\tCurrently set log level: {}",
|
case spdlog::level::debug: return "DEBUG";
|
||||||
SPDLOG_ACTIVE_LEVEL,
|
case spdlog::level::info: return "INFO";
|
||||||
std::to_underlying(spdlog::get_level()));
|
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 {
|
auto main(int argc, char** argv) -> int {
|
||||||
::testing::InitGoogleTest(&argc, argv);
|
::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 po::error& 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();
|
return RUN_ALL_TESTS();
|
||||||
}
|
}
|
Loading…
Reference in a new issue