Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

‎code/ModernCpp-ConcurrentProgramming-Tutorial/CMakeLists.txt

Lines changed: 17 additions & 1 deletion
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)
Lines changed: 29 additions & 0 deletions
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);
Lines changed: 13 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /