Удалена библиотека журналирования
This commit is contained in:
parent
305421c491
commit
d1613d814f
@ -5,12 +5,6 @@ cmake_policy(VERSION 3.0.2..3.7)
|
|||||||
# Название проекта
|
# Название проекта
|
||||||
project(myx VERSION 0.3.0 LANGUAGES C CXX)
|
project(myx VERSION 0.3.0 LANGUAGES C CXX)
|
||||||
|
|
||||||
set(CPACK_GENERATOR "TXZ;DEB")
|
|
||||||
set(CPACK_PACKAGE_CONTACT "dev@246060.ru")
|
|
||||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Mixed functions")
|
|
||||||
set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
|
|
||||||
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
|
||||||
|
|
||||||
# В каталоге cmake/lib находятся файлы с библиотечными функциями
|
# В каталоге cmake/lib находятся файлы с библиотечными функциями
|
||||||
if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake/cmlib)
|
if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake/cmlib)
|
||||||
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/cmlib)
|
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/cmlib)
|
||||||
@ -29,9 +23,6 @@ find_package(PkgConfig)
|
|||||||
# Qt5
|
# Qt5
|
||||||
find_package(Qt5 COMPONENTS Core Network Gui Widgets DBus Concurrent Sql REQUIRED)
|
find_package(Qt5 COMPONENTS Core Network Gui Widgets DBus Concurrent Sql REQUIRED)
|
||||||
|
|
||||||
pkg_check_modules(FMT fmt>=5.3.0)
|
|
||||||
pkg_check_modules(SPDLOG spdlog>=1.3.1)
|
|
||||||
|
|
||||||
# Автоматически генерируемый заголовочный файл
|
# Автоматически генерируемый заголовочный файл
|
||||||
cmlib_config_hpp_generate()
|
cmlib_config_hpp_generate()
|
||||||
|
|
||||||
@ -44,14 +35,12 @@ include(ExternalProject)
|
|||||||
# Библиотеки
|
# Библиотеки
|
||||||
add_subdirectory(src/myx/base)
|
add_subdirectory(src/myx/base)
|
||||||
add_subdirectory(src/myx/filesystem)
|
add_subdirectory(src/myx/filesystem)
|
||||||
add_subdirectory(src/myx/log)
|
|
||||||
add_subdirectory(src/myx/qt)
|
add_subdirectory(src/myx/qt)
|
||||||
add_subdirectory(src/myx/math)
|
add_subdirectory(src/myx/math)
|
||||||
|
|
||||||
# Примеры
|
# Примеры
|
||||||
if (BUILD_EXAMPLES)
|
if (BUILD_EXAMPLES)
|
||||||
add_subdirectory(examples/filesystem)
|
add_subdirectory(examples/filesystem)
|
||||||
add_subdirectory(examples/log)
|
|
||||||
add_subdirectory(examples/qt)
|
add_subdirectory(examples/qt)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ set(DOXYGEN_GENERATE_SQLITE YES)
|
|||||||
|
|
||||||
set(CPACK_GENERATOR "TXZ;DEB")
|
set(CPACK_GENERATOR "TXZ;DEB")
|
||||||
set(CPACK_PACKAGE_CONTACT "Andrei Astafev <dev@246060.ru>")
|
set(CPACK_PACKAGE_CONTACT "Andrei Astafev <dev@246060.ru>")
|
||||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyX library")
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Mixed functions")
|
||||||
set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
|
set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
|
||||||
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
||||||
set(CPACK_SOURCE_IGNORE_FILES
|
set(CPACK_SOURCE_IGNORE_FILES
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
# Название основной цели в текущем каталоге
|
|
||||||
set(current_target example-log-minimal)
|
|
||||||
|
|
||||||
# Список файлов исходных текстов
|
|
||||||
set(current_target_sources
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/minimal.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
# Путь поиска библиотек внутри проекта
|
|
||||||
link_directories(${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
|
|
||||||
link_directories(${CMAKE_BINARY_DIR}/src/myx/log/lib)
|
|
||||||
|
|
||||||
# Цель для создания исполняемого файла
|
|
||||||
add_executable(${current_target} ${current_target_sources})
|
|
||||||
common_target_properties(${current_target})
|
|
||||||
add_clang_tidy_check(${current_target} ${current_target_sources})
|
|
||||||
add_clang_analyze_check(${current_target} ${current_target_sources})
|
|
||||||
add_clazy_check(${current_target} ${current_target_sources})
|
|
||||||
add_pvs_check(${current_target})
|
|
||||||
|
|
||||||
# Форматирование исходников
|
|
||||||
add_format_sources(${current_target} ${current_target_sources} ${current_target_headers})
|
|
||||||
|
|
||||||
add_dependencies(${current_target} base)
|
|
||||||
add_dependencies(${current_target} log)
|
|
||||||
|
|
||||||
# Qt5
|
|
||||||
# qt_translation(TARGET ${current_target} TS_DIR ${CMAKE_SOURCE_DIR}/l10n LANGUAGES ru_RU)
|
|
||||||
target_include_directories(${current_target} PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${FMT_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${SPDLOG_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
target_link_libraries(${current_target} myx-log)
|
|
||||||
|
|
||||||
# Имя выходного файла для цели
|
|
||||||
set_target_properties(${current_target}
|
|
||||||
PROPERTIES
|
|
||||||
OUTPUT_NAME log-minimal
|
|
||||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_sanitizers(${current_target})
|
|
||||||
|
|
||||||
# cotire(${current_target})
|
|
||||||
|
|
||||||
# Правила для установки
|
|
||||||
install(TARGETS ${current_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
@ -1,23 +0,0 @@
|
|||||||
#include <myx/log/spdlog.hpp>
|
|
||||||
|
|
||||||
namespace ML = myx::log;
|
|
||||||
|
|
||||||
|
|
||||||
int main( int argc, char** argv )
|
|
||||||
{
|
|
||||||
(void)argc;
|
|
||||||
(void)argv;
|
|
||||||
ML::default_logger.enableStdoutSink();
|
|
||||||
|
|
||||||
spdlog::register_logger( ML::default_logger.logger() );
|
|
||||||
spdlog::set_default_logger( ML::default_logger.logger() );
|
|
||||||
|
|
||||||
ML::info( "info" );
|
|
||||||
ML::trace( "trace" );
|
|
||||||
|
|
||||||
spdlog::set_pattern( "[%H:%M:%S %z] %v" );
|
|
||||||
|
|
||||||
ML::info( "new info" );
|
|
||||||
ML::trace( "new trace" );
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
@ -1,50 +0,0 @@
|
|||||||
# Название основной цели в текущем каталоге
|
|
||||||
set(current_target example-log-qt)
|
|
||||||
|
|
||||||
# Список файлов исходных текстов
|
|
||||||
set(current_target_sources
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/qt.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
# Путь поиска библиотек внутри проекта
|
|
||||||
link_directories(${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
|
|
||||||
link_directories(${CMAKE_BINARY_DIR}/src/myx/log/lib)
|
|
||||||
|
|
||||||
# Цель для создания исполняемого файла
|
|
||||||
add_executable(${current_target} ${current_target_sources})
|
|
||||||
common_target_properties(${current_target})
|
|
||||||
add_clang_tidy_check(${current_target} ${current_target_sources})
|
|
||||||
add_clang_analyze_check(${current_target} ${current_target_sources})
|
|
||||||
add_clazy_check(${current_target} ${current_target_sources})
|
|
||||||
add_pvs_check(${current_target})
|
|
||||||
|
|
||||||
# Форматирование исходников
|
|
||||||
add_format_sources(${current_target} ${current_target_sources} ${current_target_headers})
|
|
||||||
|
|
||||||
add_dependencies(${current_target} base)
|
|
||||||
add_dependencies(${current_target} log)
|
|
||||||
|
|
||||||
# Qt5
|
|
||||||
# qt_translation(TARGET ${current_target} TS_DIR ${CMAKE_SOURCE_DIR}/l10n LANGUAGES ru_RU)
|
|
||||||
target_include_directories(${current_target} PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${FMT_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${SPDLOG_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
|
||||||
target_compile_options(${current_target} PUBLIC "${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
|
|
||||||
|
|
||||||
target_link_libraries(${current_target} myx-log)
|
|
||||||
target_link_libraries(${current_target} Qt5::Core)
|
|
||||||
|
|
||||||
# Имя выходного файла для цели
|
|
||||||
set_target_properties(${current_target}
|
|
||||||
PROPERTIES
|
|
||||||
OUTPUT_NAME log-qt
|
|
||||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_sanitizers(${current_target})
|
|
||||||
|
|
||||||
# cotire(${current_target})
|
|
||||||
|
|
||||||
# Правила для установки
|
|
||||||
install(TARGETS ${current_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
@ -1,26 +0,0 @@
|
|||||||
#include <myx/log/spdlog.hpp>
|
|
||||||
#include <myx/log/spdlog_qt.hpp>
|
|
||||||
|
|
||||||
namespace ML = myx::log;
|
|
||||||
|
|
||||||
|
|
||||||
int main( int argc, char** argv )
|
|
||||||
{
|
|
||||||
(void)argc;
|
|
||||||
(void)argv;
|
|
||||||
ML::default_logger.enableStdoutSink();
|
|
||||||
|
|
||||||
spdlog::register_logger( ML::default_logger.logger() );
|
|
||||||
spdlog::set_default_logger( ML::default_logger.logger() );
|
|
||||||
|
|
||||||
qInstallMessageHandler( ML::spdlog_qt_message_handler );
|
|
||||||
|
|
||||||
qInfo() << "info";
|
|
||||||
qDebug() << "debug";
|
|
||||||
|
|
||||||
spdlog::set_pattern( "[%H:%M:%S %z] %v" );
|
|
||||||
|
|
||||||
qInfo( "new info" );
|
|
||||||
qDebug( "new debug" );
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
add_subdirectory(01_minimal)
|
|
||||||
add_subdirectory(02_qt)
|
|
||||||
|
|
@ -27,8 +27,6 @@ add_pvs_check(${current_target})
|
|||||||
add_format_sources(${current_target} ${current_target_sources} ${current_target_headers})
|
add_format_sources(${current_target} ${current_target_sources} ${current_target_headers})
|
||||||
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${FMT_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${SPDLOG_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
target_include_directories(${current_target} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
||||||
target_include_directories(${current_target} PRIVATE ${CMAKE_BINARY_DIR}/include)
|
target_include_directories(${current_target} PRIVATE ${CMAKE_BINARY_DIR}/include)
|
||||||
|
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
# Название основной цели и имя библиотеки в текущем каталоге
|
|
||||||
set(current_target log)
|
|
||||||
|
|
||||||
# Список файлов исходных текстов
|
|
||||||
set(current_target_sources
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/spdlog.cpp
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/spdlog_qt.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
# Список заголовочных файлов (используется для установки)
|
|
||||||
set(current_target_headers
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/spdlog.hpp
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/spdlog_qt.hpp
|
|
||||||
)
|
|
||||||
|
|
||||||
add_common_library(TARGET ${current_target} OUTPUT_NAME myx-${current_target}
|
|
||||||
SOURCES ${current_target_sources})
|
|
||||||
common_target_properties(${current_target})
|
|
||||||
add_clang_tidy_check(${current_target} ${current_target_sources})
|
|
||||||
add_clang_analyze_check(${current_target} ${current_target_sources})
|
|
||||||
add_clazy_check(${current_target} ${current_target_sources})
|
|
||||||
add_pvs_check(${current_target})
|
|
||||||
|
|
||||||
# Форматирование исходников
|
|
||||||
add_format_sources(${current_target} ${current_target_sources} ${current_target_headers})
|
|
||||||
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${FMT_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${SPDLOG_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
|
||||||
|
|
||||||
# Цель, используемая только для установки заголовочных файлов без компиляции проекта
|
|
||||||
add_custom_target(${current_target}-install-headers
|
|
||||||
COMMAND "${CMAKE_COMMAND}"
|
|
||||||
-DCMAKE_INSTALL_COMPONENT=headers -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Правила для установки
|
|
||||||
install(TARGETS ${current_target}_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
if(BUILD_SHARED_LIBS)
|
|
||||||
install(TARGETS ${current_target}_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
endif()
|
|
||||||
install(FILES ${current_target_headers}
|
|
||||||
COMPONENT headers
|
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${current_target})
|
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/${current_target}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
||||||
|
|
@ -1,259 +0,0 @@
|
|||||||
#include "spdlog.hpp"
|
|
||||||
#include <myx/base/config.hpp>
|
|
||||||
|
|
||||||
namespace myx {
|
|
||||||
|
|
||||||
namespace log {
|
|
||||||
|
|
||||||
Logger default_logger( "default" );
|
|
||||||
|
|
||||||
|
|
||||||
Logger::Logger( std::string name ) :
|
|
||||||
m_logger ( nullptr ),
|
|
||||||
m_name ( std::move( name ) ),
|
|
||||||
m_outputPattern ( "[%H:%M:%S %z] [%n] [%^---%L---%$] %v" ),
|
|
||||||
m_baseFileName ( "default" ),
|
|
||||||
m_maxRotatingFileSize ( rotatingFileSize ),
|
|
||||||
m_maxRotatingFilesCount( 3 ),
|
|
||||||
m_outputLevel ( spdlog::level::trace ),
|
|
||||||
m_flushLevel ( spdlog::level::warn ),
|
|
||||||
m_nullSink ( nullptr ),
|
|
||||||
m_stdoutSink ( nullptr ),
|
|
||||||
m_stderrSink ( nullptr ),
|
|
||||||
m_syslogSink ( nullptr ),
|
|
||||||
m_basicFileSink ( nullptr ),
|
|
||||||
m_rotatingFileSink ( nullptr ),
|
|
||||||
m_dailyFileSink ( nullptr )
|
|
||||||
{
|
|
||||||
m_logger = std::make_shared< spdlog::logger >( m_name, nullptr );
|
|
||||||
m_logger->sinks().clear();
|
|
||||||
m_logger->flush_on( m_flushLevel );
|
|
||||||
m_logger->set_level( m_outputLevel );
|
|
||||||
m_logger->set_pattern( m_outputPattern );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
spdlog::level::level_enum Logger::outputLevel() const
|
|
||||||
{
|
|
||||||
return( m_outputLevel );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::setOutputLevel( const spdlog::level::level_enum outputLevel )
|
|
||||||
{
|
|
||||||
m_outputLevel = outputLevel;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
spdlog::level::level_enum Logger::flushLevel() const
|
|
||||||
{
|
|
||||||
return( m_flushLevel );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::setFlushLevel( const spdlog::level::level_enum flushLevel )
|
|
||||||
{
|
|
||||||
m_flushLevel = flushLevel;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
std::string Logger::outputPattern() const
|
|
||||||
{
|
|
||||||
return( m_outputPattern );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::setOutputPattern( const std::string& outputPattern )
|
|
||||||
{
|
|
||||||
m_outputPattern = outputPattern;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
std::shared_ptr< spdlog::logger > Logger::logger()
|
|
||||||
{
|
|
||||||
return( m_logger );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
std::string Logger::name() const
|
|
||||||
{
|
|
||||||
return( m_name );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::setName( const std::string& name )
|
|
||||||
{
|
|
||||||
m_name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
std::string Logger::baseFileName() const
|
|
||||||
{
|
|
||||||
return( m_baseFileName );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::setBaseFileName( const std::string& baseFileName )
|
|
||||||
{
|
|
||||||
m_baseFileName = baseFileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::enableNullSink()
|
|
||||||
{
|
|
||||||
if ( m_nullSink == nullptr )
|
|
||||||
{
|
|
||||||
m_nullSink = std::make_shared< spdlog::sinks::null_sink_st >();
|
|
||||||
m_logger->sinks().push_back( m_nullSink );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::disableNullSink()
|
|
||||||
{
|
|
||||||
if ( m_nullSink != nullptr )
|
|
||||||
{
|
|
||||||
auto sinks = m_logger->sinks();
|
|
||||||
sinks.erase( std::remove( sinks.begin(), sinks.end(), m_nullSink ), sinks.end() );
|
|
||||||
m_nullSink.reset();
|
|
||||||
m_nullSink = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::enableStdoutSink()
|
|
||||||
{
|
|
||||||
if ( m_stdoutSink == nullptr )
|
|
||||||
{
|
|
||||||
m_stdoutSink = std::make_shared< spdlog::sinks::ansicolor_stdout_sink_st >();
|
|
||||||
m_logger->sinks().push_back( m_stdoutSink );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::disableStdoutSink()
|
|
||||||
{
|
|
||||||
if ( m_stdoutSink != nullptr )
|
|
||||||
{
|
|
||||||
auto sinks = m_logger->sinks();
|
|
||||||
sinks.erase( std::remove( sinks.begin(), sinks.end(), m_stdoutSink ), sinks.end() );
|
|
||||||
m_stdoutSink.reset();
|
|
||||||
m_stdoutSink = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::enableStderrSink()
|
|
||||||
{
|
|
||||||
if ( m_stderrSink == nullptr )
|
|
||||||
{
|
|
||||||
m_stderrSink = std::make_shared< spdlog::sinks::ansicolor_stderr_sink_st >();
|
|
||||||
m_logger->sinks().push_back( m_stderrSink );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::disableStderrSink()
|
|
||||||
{
|
|
||||||
if ( m_stderrSink != nullptr )
|
|
||||||
{
|
|
||||||
auto sinks = m_logger->sinks();
|
|
||||||
sinks.erase( std::remove( sinks.begin(), sinks.end(), m_stderrSink ), sinks.end() );
|
|
||||||
m_stderrSink.reset();
|
|
||||||
m_stderrSink = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::enableSyslogSink()
|
|
||||||
{
|
|
||||||
if ( m_syslogSink == nullptr )
|
|
||||||
{
|
|
||||||
m_syslogSink = std::make_shared< spdlog::sinks::syslog_sink_st >();
|
|
||||||
m_logger->sinks().push_back( m_syslogSink );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::disableSyslogSink()
|
|
||||||
{
|
|
||||||
if ( m_syslogSink != nullptr )
|
|
||||||
{
|
|
||||||
auto sinks = m_logger->sinks();
|
|
||||||
sinks.erase( std::remove( sinks.begin(), sinks.end(), m_syslogSink ), sinks.end() );
|
|
||||||
m_syslogSink.reset();
|
|
||||||
m_syslogSink = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::enableBasicFileSink()
|
|
||||||
{
|
|
||||||
if ( m_basicFileSink == nullptr )
|
|
||||||
{
|
|
||||||
m_basicFileSink = std::make_shared< spdlog::sinks::basic_file_sink_st >( m_baseFileName );
|
|
||||||
m_logger->sinks().push_back( m_basicFileSink );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::disableBasicFileSink()
|
|
||||||
{
|
|
||||||
if ( m_basicFileSink != nullptr )
|
|
||||||
{
|
|
||||||
auto sinks = m_logger->sinks();
|
|
||||||
sinks.erase( std::remove( sinks.begin(), sinks.end(), m_basicFileSink ), sinks.end() );
|
|
||||||
m_basicFileSink.reset();
|
|
||||||
m_basicFileSink = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::enableRotatingFileSink()
|
|
||||||
{
|
|
||||||
if ( m_rotatingFileSink == nullptr )
|
|
||||||
{
|
|
||||||
m_rotatingFileSink = std::make_shared< spdlog::sinks::rotating_file_sink_st >( m_baseFileName, m_maxRotatingFileSize, m_maxRotatingFilesCount );
|
|
||||||
m_logger->sinks().push_back( m_rotatingFileSink );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::disableRotatingFileSink()
|
|
||||||
{
|
|
||||||
if ( m_rotatingFileSink != nullptr )
|
|
||||||
{
|
|
||||||
auto sinks = m_logger->sinks();
|
|
||||||
sinks.erase( std::remove( sinks.begin(), sinks.end(), m_rotatingFileSink ), sinks.end() );
|
|
||||||
m_rotatingFileSink.reset();
|
|
||||||
m_rotatingFileSink = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::enableDailyFileSink()
|
|
||||||
{
|
|
||||||
if ( m_dailyFileSink == nullptr )
|
|
||||||
{
|
|
||||||
const int rotationHour = 23;
|
|
||||||
const int rotationMinute = 59;
|
|
||||||
m_dailyFileSink = std::make_shared< spdlog::sinks::daily_file_sink_st >( m_baseFileName, rotationHour, rotationMinute );
|
|
||||||
m_logger->sinks().push_back( m_dailyFileSink );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Logger::disableDailyFileSink()
|
|
||||||
{
|
|
||||||
if ( m_dailyFileSink != nullptr )
|
|
||||||
{
|
|
||||||
auto sinks = m_logger->sinks();
|
|
||||||
sinks.erase( std::remove( sinks.begin(), sinks.end(), m_dailyFileSink ), sinks.end() );
|
|
||||||
m_dailyFileSink.reset();
|
|
||||||
m_dailyFileSink = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace log
|
|
||||||
|
|
||||||
} // namespace myx
|
|
@ -1,122 +0,0 @@
|
|||||||
#ifndef MYX_LOG_SPDLOG_HPP_
|
|
||||||
#define MYX_LOG_SPDLOG_HPP_
|
|
||||||
|
|
||||||
#include <spdlog/sinks/sink.h>
|
|
||||||
#include <spdlog/sinks/null_sink.h>
|
|
||||||
#include <spdlog/sinks/syslog_sink.h>
|
|
||||||
#include <spdlog/sinks/basic_file_sink.h>
|
|
||||||
#include <spdlog/sinks/rotating_file_sink.h>
|
|
||||||
#include <spdlog/sinks/daily_file_sink.h>
|
|
||||||
|
|
||||||
namespace myx {
|
|
||||||
|
|
||||||
namespace log {
|
|
||||||
|
|
||||||
const size_t rotatingFileSize = 256 * 1024;
|
|
||||||
|
|
||||||
class Logger
|
|
||||||
{
|
|
||||||
std::shared_ptr< spdlog::logger > m_logger;
|
|
||||||
std::string m_name;
|
|
||||||
std::string m_outputPattern;
|
|
||||||
std::string m_baseFileName;
|
|
||||||
std::size_t m_maxRotatingFileSize;
|
|
||||||
std::size_t m_maxRotatingFilesCount;
|
|
||||||
spdlog::level::level_enum m_outputLevel;
|
|
||||||
spdlog::level::level_enum m_flushLevel;
|
|
||||||
std::shared_ptr< spdlog::sinks::null_sink_st > m_nullSink;
|
|
||||||
std::shared_ptr< spdlog::sinks::ansicolor_stdout_sink_st > m_stdoutSink;
|
|
||||||
std::shared_ptr< spdlog::sinks::ansicolor_stderr_sink_st > m_stderrSink;
|
|
||||||
std::shared_ptr< spdlog::sinks::syslog_sink_st > m_syslogSink;
|
|
||||||
std::shared_ptr< spdlog::sinks::basic_file_sink_st > m_basicFileSink;
|
|
||||||
std::shared_ptr< spdlog::sinks::rotating_file_sink_st > m_rotatingFileSink;
|
|
||||||
std::shared_ptr< spdlog::sinks::daily_file_sink_st > m_dailyFileSink;
|
|
||||||
|
|
||||||
public:
|
|
||||||
Logger( std::string name );
|
|
||||||
|
|
||||||
void init();
|
|
||||||
std::shared_ptr< spdlog::logger > logger();
|
|
||||||
std::string name() const;
|
|
||||||
void setName( const std::string& name );
|
|
||||||
std::string baseFileName() const;
|
|
||||||
void setBaseFileName( const std::string& baseFileName );
|
|
||||||
|
|
||||||
void enableNullSink();
|
|
||||||
void disableNullSink();
|
|
||||||
void enableStdoutSink();
|
|
||||||
void disableStdoutSink();
|
|
||||||
void enableStderrSink();
|
|
||||||
void disableStderrSink();
|
|
||||||
void enableSyslogSink();
|
|
||||||
void disableSyslogSink();
|
|
||||||
void enableBasicFileSink();
|
|
||||||
void disableBasicFileSink();
|
|
||||||
void enableRotatingFileSink();
|
|
||||||
void disableRotatingFileSink();
|
|
||||||
void enableDailyFileSink();
|
|
||||||
void disableDailyFileSink();
|
|
||||||
spdlog::level::level_enum outputLevel() const;
|
|
||||||
void setOutputLevel( const spdlog::level::level_enum outputLevel );
|
|
||||||
spdlog::level::level_enum flushLevel() const;
|
|
||||||
void setFlushLevel( const spdlog::level::level_enum flushLevel );
|
|
||||||
std::string outputPattern() const;
|
|
||||||
void setOutputPattern( const std::string& outputPattern );
|
|
||||||
}; // class Logger
|
|
||||||
|
|
||||||
extern Logger default_logger;
|
|
||||||
|
|
||||||
|
|
||||||
template < class F, class ... Args >
|
|
||||||
void trace( F&& format, Args&& ... args ) noexcept
|
|
||||||
{
|
|
||||||
default_logger.logger()->trace( std::forward< F >( format ),
|
|
||||||
std::forward< Args >( args )... );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template < class F, class ... Args >
|
|
||||||
void debug( F&& format, Args&& ... args ) noexcept
|
|
||||||
{
|
|
||||||
default_logger.logger()->debug( std::forward< F >( format ),
|
|
||||||
std::forward< Args >( args )... );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template < class F, class ... Args >
|
|
||||||
void info( F&& format, Args&& ... args ) noexcept
|
|
||||||
{
|
|
||||||
default_logger.logger()->info( std::forward< F >( format ),
|
|
||||||
std::forward< Args >( args )... );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template < class F, class ... Args >
|
|
||||||
void warn( F&& format, Args&& ... args ) noexcept
|
|
||||||
{
|
|
||||||
default_logger.logger()->warn( std::forward< F >( format ),
|
|
||||||
std::forward< Args >( args )... );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template < class F, class ... Args >
|
|
||||||
void error( F&& format, Args&& ... args ) noexcept
|
|
||||||
{
|
|
||||||
default_logger.logger()->error( std::forward< F >( format ),
|
|
||||||
std::forward< Args >( args )... );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template < class F, class ... Args >
|
|
||||||
void log( spdlog::level::level_enum lv, F&& format, Args&& ... args ) noexcept
|
|
||||||
{
|
|
||||||
default_logger.logger()->log( lv, std::forward< F >( format ),
|
|
||||||
std::forward< Args >( args )... );
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace log
|
|
||||||
|
|
||||||
} // namespace myx
|
|
||||||
|
|
||||||
|
|
||||||
#endif // ifndef MYX_LOG_SPDLOG_HPP_
|
|
@ -1,44 +0,0 @@
|
|||||||
#include "spdlog.hpp"
|
|
||||||
#include "spdlog_qt.hpp"
|
|
||||||
|
|
||||||
#include <QCoreApplication>
|
|
||||||
|
|
||||||
namespace myx {
|
|
||||||
|
|
||||||
namespace log {
|
|
||||||
|
|
||||||
void spdlog_qt_message_handler( QtMsgType type, const QMessageLogContext& context, const QString& qMsg )
|
|
||||||
{
|
|
||||||
Q_UNUSED( context )
|
|
||||||
|
|
||||||
if ( !default_logger.logger() )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto message = qMsg.toUtf8();
|
|
||||||
|
|
||||||
switch ( type )
|
|
||||||
{
|
|
||||||
case QtDebugMsg:
|
|
||||||
default_logger.logger()->debug( message.constData() );
|
|
||||||
break;
|
|
||||||
case QtInfoMsg:
|
|
||||||
default_logger.logger()->info( message.constData() );
|
|
||||||
break;
|
|
||||||
case QtWarningMsg:
|
|
||||||
default_logger.logger()->warn( message.constData() );
|
|
||||||
break;
|
|
||||||
case QtCriticalMsg:
|
|
||||||
default_logger.logger()->critical( message.constData() );
|
|
||||||
break;
|
|
||||||
case QtFatalMsg:
|
|
||||||
default_logger.logger()->critical( "FATAL: %s", message.constData() );
|
|
||||||
QCoreApplication::exit( 1 );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} // messageHandler
|
|
||||||
|
|
||||||
} // namespace log
|
|
||||||
|
|
||||||
} // namespace myx
|
|
@ -1,18 +0,0 @@
|
|||||||
#ifndef MYX_LOG_SPDLOG_QT_HPP_
|
|
||||||
#define MYX_LOG_SPDLOG_QT_HPP_
|
|
||||||
|
|
||||||
#include <QMessageLogContext>
|
|
||||||
#include <QString>
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
namespace myx {
|
|
||||||
|
|
||||||
namespace log {
|
|
||||||
|
|
||||||
void spdlog_qt_message_handler( QtMsgType type, const QMessageLogContext& context, const QString& qMsg );
|
|
||||||
|
|
||||||
} // namespace log
|
|
||||||
|
|
||||||
} // namespace myx
|
|
||||||
|
|
||||||
#endif // ifndef MYX_LOG_SPDLOG_QT_HPP_
|
|
@ -37,8 +37,6 @@ add_pvs_check(${current_target})
|
|||||||
add_format_sources(${current_target} ${current_target_sources} ${current_target_headers})
|
add_format_sources(${current_target} ${current_target_sources} ${current_target_headers})
|
||||||
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${FMT_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${SPDLOG_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
target_include_directories(${current_target} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
||||||
target_include_directories(${current_target} PRIVATE ${CMAKE_BINARY_DIR}/include)
|
target_include_directories(${current_target} PRIVATE ${CMAKE_BINARY_DIR}/include)
|
||||||
|
|
||||||
|
@ -21,8 +21,6 @@ add_pvs_check(${current_target})
|
|||||||
add_format_sources(${current_target} ${current_target_sources} ${current_target_headers})
|
add_format_sources(${current_target} ${current_target_sources} ${current_target_headers})
|
||||||
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
target_include_directories(${current_target} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS})
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${FMT_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PUBLIC ${SPDLOG_INCLUDE_DIRS})
|
|
||||||
target_include_directories(${current_target} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
target_include_directories(${current_target} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
||||||
|
|
||||||
# Цель, используемая только для установки заголовочных файлов без компиляции
|
# Цель, используемая только для установки заголовочных файлов без компиляции
|
||||||
|
Loading…
x
Reference in New Issue
Block a user