Skip to content

Commit 0c78a47

Browse files
committed
修改 CMakeList,引入cpp-terminalspdlog。编写 spdlog 设置文件 Log.h ,还需改进。
后续考虑编写详细的构建文档。
1 parent c44abef commit 0c78a47

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

Diff for: code/ModernCpp-ConcurrentProgramming-Tutorial/CMakeLists.txt

+17-1
Original file line numberDiff line numberDiff 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")
1313
endif()
1414

15-
add_executable(${PROJECT_NAME} "45原子特化shared_ptr.cpp")
15+
add_executable(${PROJECT_NAME} "test2.cpp")
1616

1717
set(SFML_DIR "D:/lib/SFML-2.6.1-windows-vc17-64-bit/SFML-2.6.1/lib/cmake/SFML")
1818
find_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")
3030
include_directories(${Boost_INCLUDE_DIR})
3131
find_package(Boost REQUIRED COMPONENTS system)
3232
target_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)

Diff for: code/ModernCpp-ConcurrentProgramming-Tutorial/Log.h

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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);
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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+
}

0 commit comments

Comments
 (0)