update 添加时间 等级

This commit is contained in:
czzhangheng 2025-07-09 15:05:24 +08:00
parent f4817f3ac1
commit 9bae918829
16 changed files with 4019 additions and 288 deletions

View File

@ -3,5 +3,4 @@ project(cppTemp)
set(CMAKE_CXX_STANDARD 20)
add_executable(cppTemp main.cpp
)
add_executable(cppTemp main.cpp Logger.cpp Logger.h)

View File

@ -30,8 +30,9 @@ class LogQueue {
public:
void push(const std::string& msg) {
std::lock_guard<std::mutex> lock(mutex_);
queue_.push(msg);
//构造好自动加锁,析构自动解锁
cond_var_.notify_one();
cond_var_.notify_all();
}; //字符串放队列中
bool pop(std::string& msg) {
std::unique_lock<std::mutex> lock(mutex_);
@ -44,6 +45,12 @@ public:
if (is_shutdown_ && queue_.empty()) {
return false;
}
//保证队列的数据被清空掉
// while (is_shutdown_ && !queue_.empty()) {
// msg = queue_.front();
// queue_.pop();
// return false;
// }
msg = queue_.front(); //返回消息给msg指针
queue_.pop();
return true;
@ -60,6 +67,13 @@ private:
bool is_shutdown_ = false;
};
enum class Loglevel {
INFO,
DEBUG,
WARNING,
ERROR
};
class Logger {
public:
Logger(const std::string& filename) : log_file_(filename, std::ios::out | std::ios::app)
@ -75,12 +89,80 @@ public:
}
});
};
~Logger();
~Logger() {
exit_flag_ = true;
log_queue_.shutdown();
//如果日志结束了,说明主线程退出,这里是优雅退出,等待其他主线程
if (worker_thread_.joinable()) {
worker_thread_.join();
}
if (log_file_.is_open()) {
log_file_.close();
}
};
template<typename ... Args>
void log(const std::string& format, Args&& ...args);
void log(Loglevel loglevel, const std::string& format, Args&& ...args) {
std::string level_str;
switch (loglevel) {
case Loglevel::INFO:
level_str = "[INFO] ";
break;
case Loglevel::DEBUG:
level_str = "[DEBUG] ";
break;
case Loglevel::WARNING:
level_str = "[WARNING] ";
break;
case Loglevel::ERROR:
level_str = "[ERROR] ";
break;
}
log_queue_.push(level_str + formatMessage(format, std::forward<Args>(args)...));
};
private:
std::string GetTimeStamp() {
std::time_t now = std::time(nullptr);
std::tm* local_time = std::localtime(&now);
char buffer[80];
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local_time);
return std::string(buffer);
}
template<typename ... Args>
std::string formatMessage(const std::string& format, Args&&...args) {
std::vector<std::string> arg_strings = {to_string_helper(std::forward<Args>(args))...};
std::ostringstream oss;
size_t arg_index = 0;
size_t pos = 0;
size_t placeholder = format.find("{}", pos);
oss << GetTimeStamp() << " ";
while (placeholder != std::string::npos) {
oss << format.substr(pos, placeholder - pos);
if (arg_index < arg_strings.size()) {
oss << arg_strings[arg_index];
} else {
oss << "{}";
//如果占位符没有对应参数,保留占位符
}
arg_strings[arg_index++];
pos = placeholder + 2;
placeholder = format.find("{}", pos);
}
oss << format.substr(pos);
while (arg_index < arg_strings.size()) {
oss << arg_strings[arg_index++];
}
return oss.str();
}
LogQueue log_queue_;
std::thread worker_thread_;
std::ofstream log_file_;

View File

@ -1,60 +0,0 @@
{
"configurations" :
[
{
"directories" :
[
{
"build" : ".",
"jsonFile" : "directory-.-Debug-f5ebdc15457944623624.json",
"minimumCMakeVersion" :
{
"string" : "3.30"
},
"projectIndex" : 0,
"source" : ".",
"targetIndexes" :
[
0
]
}
],
"name" : "Debug",
"projects" :
[
{
"directoryIndexes" :
[
0
],
"name" : "cppTemp",
"targetIndexes" :
[
0
]
}
],
"targets" :
[
{
"directoryIndex" : 0,
"id" : "cppTemp::@6890427a1f51a3e7e1df",
"jsonFile" : "target-cppTemp-Debug-f55973cf228b99e57e4f.json",
"name" : "cppTemp",
"projectIndex" : 0
}
]
}
],
"kind" : "codemodel",
"paths" :
{
"build" : "/Users/czzhangheng/cppTemp/cmake-build-debug",
"source" : "/Users/czzhangheng/cppTemp"
},
"version" :
{
"major" : 2,
"minor" : 7
}
}

View File

@ -1,133 +0,0 @@
{
"artifacts" :
[
{
"path" : "cppTemp"
}
],
"backtrace" : 1,
"backtraceGraph" :
{
"commands" :
[
"add_executable"
],
"files" :
[
"CMakeLists.txt"
],
"nodes" :
[
{
"file" : 0
},
{
"command" : 0,
"file" : 0,
"line" : 6,
"parent" : 0
}
]
},
"compileGroups" :
[
{
"compileCommandFragments" :
[
{
"fragment" : "-g -std=gnu++20 -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk -fcolor-diagnostics"
}
],
"language" : "CXX",
"languageStandard" :
{
"backtraces" :
[
1
],
"standard" : "20"
},
"sourceIndexes" :
[
0,
1,
3
]
}
],
"id" : "cppTemp::@6890427a1f51a3e7e1df",
"link" :
{
"commandFragments" :
[
{
"fragment" : "-g",
"role" : "flags"
},
{
"fragment" : "",
"role" : "flags"
}
],
"language" : "CXX"
},
"name" : "cppTemp",
"nameOnDisk" : "cppTemp",
"paths" :
{
"build" : ".",
"source" : "."
},
"sourceGroups" :
[
{
"name" : "Source Files",
"sourceIndexes" :
[
0,
1,
3
]
},
{
"name" : "Header Files",
"sourceIndexes" :
[
2,
4
]
}
],
"sources" :
[
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "main.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "dl.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "dl.h",
"sourceGroupIndex" : 1
},
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "d35.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "d35.h",
"sourceGroupIndex" : 1
}
],
"type" : "EXECUTABLE"
}

View File

@ -81,12 +81,12 @@ clean: CMakeFiles/cppTemp.dir/clean
CMakeFiles/cppTemp.dir/all:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles --progress-num=1,2,3,4 "Built target cppTemp"
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles --progress-num=1,2,3 "Built target cppTemp"
.PHONY : CMakeFiles/cppTemp.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/cppTemp.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles 4
$(CMAKE_COMMAND) -E cmake_progress_start /Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles 3
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/cppTemp.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles 0
.PHONY : CMakeFiles/cppTemp.dir/rule

View File

@ -8,8 +8,7 @@ set(CMAKE_DEPENDS_LANGUAGES
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
"/Users/czzhangheng/cppTemp/d35.cpp" "CMakeFiles/cppTemp.dir/d35.cpp.o" "gcc" "CMakeFiles/cppTemp.dir/d35.cpp.o.d"
"/Users/czzhangheng/cppTemp/dl.cpp" "CMakeFiles/cppTemp.dir/dl.cpp.o" "gcc" "CMakeFiles/cppTemp.dir/dl.cpp.o.d"
"/Users/czzhangheng/cppTemp/Logger.cpp" "CMakeFiles/cppTemp.dir/Logger.cpp.o" "gcc" "CMakeFiles/cppTemp.dir/Logger.cpp.o.d"
"/Users/czzhangheng/cppTemp/main.cpp" "CMakeFiles/cppTemp.dir/main.cpp.o" "gcc" "CMakeFiles/cppTemp.dir/main.cpp.o.d"
)

View File

@ -83,49 +83,33 @@ CMakeFiles/cppTemp.dir/main.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/cppTemp.dir/main.cpp.s"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/czzhangheng/cppTemp/main.cpp -o CMakeFiles/cppTemp.dir/main.cpp.s
CMakeFiles/cppTemp.dir/dl.cpp.o: CMakeFiles/cppTemp.dir/flags.make
CMakeFiles/cppTemp.dir/dl.cpp.o: /Users/czzhangheng/cppTemp/dl.cpp
CMakeFiles/cppTemp.dir/dl.cpp.o: CMakeFiles/cppTemp.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/cppTemp.dir/dl.cpp.o"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/cppTemp.dir/dl.cpp.o -MF CMakeFiles/cppTemp.dir/dl.cpp.o.d -o CMakeFiles/cppTemp.dir/dl.cpp.o -c /Users/czzhangheng/cppTemp/dl.cpp
CMakeFiles/cppTemp.dir/Logger.cpp.o: CMakeFiles/cppTemp.dir/flags.make
CMakeFiles/cppTemp.dir/Logger.cpp.o: /Users/czzhangheng/cppTemp/Logger.cpp
CMakeFiles/cppTemp.dir/Logger.cpp.o: CMakeFiles/cppTemp.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/cppTemp.dir/Logger.cpp.o"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/cppTemp.dir/Logger.cpp.o -MF CMakeFiles/cppTemp.dir/Logger.cpp.o.d -o CMakeFiles/cppTemp.dir/Logger.cpp.o -c /Users/czzhangheng/cppTemp/Logger.cpp
CMakeFiles/cppTemp.dir/dl.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/cppTemp.dir/dl.cpp.i"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/czzhangheng/cppTemp/dl.cpp > CMakeFiles/cppTemp.dir/dl.cpp.i
CMakeFiles/cppTemp.dir/Logger.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/cppTemp.dir/Logger.cpp.i"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/czzhangheng/cppTemp/Logger.cpp > CMakeFiles/cppTemp.dir/Logger.cpp.i
CMakeFiles/cppTemp.dir/dl.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/cppTemp.dir/dl.cpp.s"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/czzhangheng/cppTemp/dl.cpp -o CMakeFiles/cppTemp.dir/dl.cpp.s
CMakeFiles/cppTemp.dir/d35.cpp.o: CMakeFiles/cppTemp.dir/flags.make
CMakeFiles/cppTemp.dir/d35.cpp.o: /Users/czzhangheng/cppTemp/d35.cpp
CMakeFiles/cppTemp.dir/d35.cpp.o: CMakeFiles/cppTemp.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/cppTemp.dir/d35.cpp.o"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/cppTemp.dir/d35.cpp.o -MF CMakeFiles/cppTemp.dir/d35.cpp.o.d -o CMakeFiles/cppTemp.dir/d35.cpp.o -c /Users/czzhangheng/cppTemp/d35.cpp
CMakeFiles/cppTemp.dir/d35.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/cppTemp.dir/d35.cpp.i"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/czzhangheng/cppTemp/d35.cpp > CMakeFiles/cppTemp.dir/d35.cpp.i
CMakeFiles/cppTemp.dir/d35.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/cppTemp.dir/d35.cpp.s"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/czzhangheng/cppTemp/d35.cpp -o CMakeFiles/cppTemp.dir/d35.cpp.s
CMakeFiles/cppTemp.dir/Logger.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/cppTemp.dir/Logger.cpp.s"
/Library/Developer/CommandLineTools/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/czzhangheng/cppTemp/Logger.cpp -o CMakeFiles/cppTemp.dir/Logger.cpp.s
# Object files for target cppTemp
cppTemp_OBJECTS = \
"CMakeFiles/cppTemp.dir/main.cpp.o" \
"CMakeFiles/cppTemp.dir/dl.cpp.o" \
"CMakeFiles/cppTemp.dir/d35.cpp.o"
"CMakeFiles/cppTemp.dir/Logger.cpp.o"
# External object files for target cppTemp
cppTemp_EXTERNAL_OBJECTS =
cppTemp: CMakeFiles/cppTemp.dir/main.cpp.o
cppTemp: CMakeFiles/cppTemp.dir/dl.cpp.o
cppTemp: CMakeFiles/cppTemp.dir/d35.cpp.o
cppTemp: CMakeFiles/cppTemp.dir/Logger.cpp.o
cppTemp: CMakeFiles/cppTemp.dir/build.make
cppTemp: CMakeFiles/cppTemp.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking CXX executable cppTemp"
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/Users/czzhangheng/cppTemp/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking CXX executable cppTemp"
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/cppTemp.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.

View File

@ -1,8 +1,6 @@
file(REMOVE_RECURSE
"CMakeFiles/cppTemp.dir/d35.cpp.o"
"CMakeFiles/cppTemp.dir/d35.cpp.o.d"
"CMakeFiles/cppTemp.dir/dl.cpp.o"
"CMakeFiles/cppTemp.dir/dl.cpp.o.d"
"CMakeFiles/cppTemp.dir/Logger.cpp.o"
"CMakeFiles/cppTemp.dir/Logger.cpp.o.d"
"CMakeFiles/cppTemp.dir/main.cpp.o"
"CMakeFiles/cppTemp.dir/main.cpp.o.d"
"cppTemp"

File diff suppressed because it is too large Load Diff

View File

@ -1 +1 @@
/Library/Developer/CommandLineTools/usr/bin/c++ -g -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/cppTemp.dir/main.cpp.o CMakeFiles/cppTemp.dir/dl.cpp.o CMakeFiles/cppTemp.dir/d35.cpp.o -o cppTemp
/Library/Developer/CommandLineTools/usr/bin/c++ -g -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/cppTemp.dir/main.cpp.o CMakeFiles/cppTemp.dir/Logger.cpp.o -o cppTemp

View File

@ -1,5 +1,4 @@
CMAKE_PROGRESS_1 = 1
CMAKE_PROGRESS_2 = 2
CMAKE_PROGRESS_3 = 3
CMAKE_PROGRESS_4 = 4

View File

@ -1 +1 @@
4
3

View File

@ -129,53 +129,29 @@ cppTemp/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/build
.PHONY : cppTemp/fast
d35.o: d35.cpp.o
.PHONY : d35.o
Logger.o: Logger.cpp.o
.PHONY : Logger.o
# target to build an object file
d35.cpp.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/d35.cpp.o
.PHONY : d35.cpp.o
Logger.cpp.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/Logger.cpp.o
.PHONY : Logger.cpp.o
d35.i: d35.cpp.i
.PHONY : d35.i
Logger.i: Logger.cpp.i
.PHONY : Logger.i
# target to preprocess a source file
d35.cpp.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/d35.cpp.i
.PHONY : d35.cpp.i
Logger.cpp.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/Logger.cpp.i
.PHONY : Logger.cpp.i
d35.s: d35.cpp.s
.PHONY : d35.s
Logger.s: Logger.cpp.s
.PHONY : Logger.s
# target to generate assembly for a file
d35.cpp.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/d35.cpp.s
.PHONY : d35.cpp.s
dl.o: dl.cpp.o
.PHONY : dl.o
# target to build an object file
dl.cpp.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/dl.cpp.o
.PHONY : dl.cpp.o
dl.i: dl.cpp.i
.PHONY : dl.i
# target to preprocess a source file
dl.cpp.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/dl.cpp.i
.PHONY : dl.cpp.i
dl.s: dl.cpp.s
.PHONY : dl.s
# target to generate assembly for a file
dl.cpp.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/dl.cpp.s
.PHONY : dl.cpp.s
Logger.cpp.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/cppTemp.dir/build.make CMakeFiles/cppTemp.dir/Logger.cpp.s
.PHONY : Logger.cpp.s
main.o: main.cpp.o
.PHONY : main.o
@ -210,12 +186,9 @@ help:
@echo "... edit_cache"
@echo "... rebuild_cache"
@echo "... cppTemp"
@echo "... d35.o"
@echo "... d35.i"
@echo "... d35.s"
@echo "... dl.o"
@echo "... dl.i"
@echo "... dl.s"
@echo "... Logger.o"
@echo "... Logger.i"
@echo "... Logger.s"
@echo "... main.o"
@echo "... main.i"
@echo "... main.s"

View File

@ -1,3 +1,3 @@
Start testing: Jul 08 15:43 CST
Start testing: Jul 09 14:56 CST
----------------------------------------------------------
End testing: Jul 08 15:43 CST
End testing: Jul 09 14:56 CST

Binary file not shown.

View File

@ -3,6 +3,20 @@
int main() {
try {
Logger logger("log.txt");
int id = 42;
std::string action = "login";
double duration = 2.333;
std::string channel = "World";
logger.log(Loglevel::INFO, "User {} performed {} in {} seconds", id, action, duration);
logger.log(Loglevel::DEBUG,"Hello {}", channel);
logger.log(Loglevel::WARNING,"This is a log message.");
logger.log(Loglevel::ERROR,"Multiple placeholders : {}, {}, ",1,2,3);
} catch (const std::exception&e) {
std::cerr << "Error is" << e.what() << std::endl;
}
return 0;
}