File tree Expand file tree Collapse file tree 3 files changed +59
-1
lines changed
code/ModernCpp-ConcurrentProgramming-Tutorial Expand file tree Collapse file tree 3 files changed +59
-1
lines changed Original file line number Diff line number Diff line change @@ -12,7 +12,7 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "C
1212 add_compile_options ("-finput-charset=UTF-8" "-fexec-charset=UTF-8" "-fopenmp" )
1313endif ()
1414
15- add_executable (${PROJECT_NAME} "45原子特化shared_ptr .cpp" )
15+ add_executable (${PROJECT_NAME} "test2 .cpp" )
1616
1717set (SFML_DIR "D:/lib/SFML-2.6.1-windows-vc17-64-bit/SFML-2.6.1/lib/cmake/SFML" )
1818find_package (SFML 2.6.1 COMPONENTS system window graphics audio network REQUIRED)
@@ -30,3 +30,19 @@ set(Boost_INCLUDE_DIR "D:/vcpkg-master/installed/x64-windows/include")
3030include_directories (${Boost_INCLUDE_DIR} )
3131find_package (Boost REQUIRED COMPONENTS system )
3232target_link_libraries (${PROJECT_NAME} PRIVATE Boost::system )
33+
34+ target_include_directories (${PROJECT_NAME} PRIVATE "D:/project/cpp-terminal/include" )
35+ if (CMAKE_BUILD_TYPE STREQUAL "Release" )
36+ target_link_libraries (${PROJECT_NAME} PRIVATE
37+ "D:/project/cpp-terminal/lib/cpp-terminal-private.lib"
38+ "D:/project/cpp-terminal/lib/cpp-terminal.lib"
39+ )
40+ else ()
41+ target_link_libraries (${PROJECT_NAME} PRIVATE
42+ "D:/project/cpp-terminal/lib/private/debug/cpp-terminal-private.lib"
43+ "D:/project/cpp-terminal/lib/debug/cpp-terminal.lib"
44+ )
45+ endif ()
46+
47+ find_package (spdlog REQUIRED)
48+ target_link_libraries (${PROJECT_NAME} PRIVATE spdlog::spdlog_header_only)
Original file line number Diff line number Diff line change 1+ #pragma once
2+
3+ #include < spdlog/spdlog.h>
4+ #include < spdlog/sinks/stdout_color_sinks.h>
5+ #include < spdlog/sinks/basic_file_sink.h>
6+
7+ inline void setupLogging () {
8+ auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(" logs.txt" );
9+ file_sink->set_level (spdlog::level::debug);
10+ file_sink->set_pattern (" [%Y-%m-%d %H:%M:%S] [%@] [%!] [thread %t] [%oms] [%l] %v" );
11+
12+ auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
13+ console_sink->set_level (spdlog::level::debug);
14+ console_sink->set_pattern (" %^[%Y-%m-%d %H:%M:%S] [thread %t] [%oms] [%l] %v%$" );
15+
16+ auto logger = std::make_shared<spdlog::logger>(" multi_sink" , spdlog::sinks_init_list{ file_sink, console_sink });
17+ spdlog::register_logger (logger);
18+
19+ spdlog::set_default_logger (logger);
20+ }
21+
22+ // spdlog 要想输出文件、路径、函数、行号,只能借助此宏,才会显示。
23+ // 其实使用 C++20 std::source_location 也能获取这些信息,后面再考虑单独封装吧,目前这样做导致没办法做格式字符串。
24+
25+ #define LOG_INFO (msg, ...) SPDLOG_LOGGER_INFO(spdlog::get(" multi_sink" ), msg)
26+ #define LOG_WARN (msg, ...) SPDLOG_LOGGER_WARN(spdlog::get(" multi_sink" ), msg)
27+ #define LOG_ERROR (msg, ...) SPDLOG_LOGGER_ERROR(spdlog::get(" multi_sink" ), msg)
28+
29+ const auto init_log = (setupLogging(), 0 );
Original file line number Diff line number Diff line change 1+ #include " Log.h"
2+ #include < thread>
3+ #include < format>
4+ using namespace std ::chrono_literals;
5+
6+ int main () {
7+ LOG_WARN (" 😅" );
8+ std::jthread t{[]{
9+ std::this_thread::sleep_for (100ms);
10+ LOG_ERROR (" 🤣" );
11+ }};
12+ LOG_INFO (" 👉" );
13+ }
You can’t perform that action at this time.
0 commit comments