asp自动获取网站快照 网站缩略图,国家企业信息公示网(广东),删除网站备案与注销,管理系统软件开发全面监控#xff1a;系统日志记录
系统日志是记录计算机系统各种活动和事件的文件或数据库。它们包含了系统的运行状态、错误信息、警告、用户操作记录等。
系统管理员和软件开发人员经常使用系统日志来诊断问题、监视系统性能和跟踪用户活动。
日志记录通常包括时间戳、事…全面监控系统日志记录
系统日志是记录计算机系统各种活动和事件的文件或数据库。它们包含了系统的运行状态、错误信息、警告、用户操作记录等。
系统管理员和软件开发人员经常使用系统日志来诊断问题、监视系统性能和跟踪用户活动。
日志记录通常包括时间戳、事件类型、事件描述以及相关的详细信息。
通过分析系统日志可以及时发现并解决系统故障、安全漏洞和其他问题
在实际的开发中 ,是有专门的开源框架的 , 我们只需要进行相应的部署和应用 。日志系统实际上很简单 没什么技术含量 。就是一些简单的输入输出。
目的就是我们在打印日志的时候 不需要进行手动的 std::cerrstd::endl这样书写。一个完整的项目日志系统是不可缺少的。
比较好的开源项目 log4cpp : 一系列C类库灵活添加日志到文件系统日志IDSA和其他地方。
安装
# 下载安装包
wget
https://sourceforge.net/projects/log4cpp/files/log4cpp-1.1.x%20%28new%29/log4cpp-1.1/log4cpp-1.1.4.tar.gz/download
# 解压
tar -xzvf log4cpp-1.1.4.tar.gz
cd og4cpp-1.1.4./configuremakemake install 具体用法可以区看官方的文档。
这里我给大家提供了一个简单的日志系统 创建一个日志类 可以直接拿来使用。
简单实现
#include iostream
#include sstream
#include iomanip
#include ctime
#include chrono
#include thread// 定义日志级别
enum class LogLevel {DEBUG,INFO,WARNING,ERROR
};class Logger {
private:LogLevel logLevel; // 日志等级// 获取当前时间戳std::string getTimeStamp() {auto now std::chrono::system_clock::now(); //获取当前的系统时间戳// std::chrono::system_clock::to_time_t - 转换成std::time_t 类型的对象 std::time_t 通常是一个整数类型// 大小是1970年1月1日 00:00:00 以来的秒数。auto time_t_now std::chrono::system_clock::to_time_t(now);std::stringstream ss;/*std::localtime(time_t_now将 time_t_now 转换成本地时间返回类型是 tm* - 结构体类型*/// put_time 将 tm 结构体格式化为字符串 ss std::put_time(std::localtime(time_t_now), %Y-%m-%d %H:%M:%S);return ss.str();}// 获取当前线程的句柄std::string getCurrentThreadId() {std::stringstream ss;ss std::this_thread::get_id();return ss.str();}public:Logger(LogLevel level LogLevel::INFO) : logLevel(level) {}// 打印日志void log(LogLevel level, const std::string message, const char* file, int line) {if (level logLevel) {return;}std::cout getTimeStamp() ;std::cout [ getCurrentThreadId() ] ;std::cout [ file : line ] ;switch (level) {case LogLevel::DEBUG:std::cout [DEBUG] ;break;case LogLevel::INFO:std::cout [INFO] ;break;case LogLevel::WARNING:std::cout [WARNING] ;break;case LogLevel::ERROR:std::cout [ERROR] ;break;}std::cout message std::endl;}void setLogLevel(LogLevel level) {logLevel level;}void debug(const std::string message, const char* file, int line) {log(LogLevel::DEBUG, message, file, line);}void info(const std::string message, const char* file, int line) {log(LogLevel::INFO, message, file, line);}void warning(const std::string message, const char* file, int line) {log(LogLevel::WARNING, message, file, line);}void error(const std::string message, const char* file, int line) {log(LogLevel::ERROR, message, file, line);}
};// 宏定义简化日志输出
// __FILE__ 是一个预定义的宏它代表当前源代码文件的名称
// __LINE__ 是一个预定义的宏它代表当前源代码中的行号
#define LOG_DEBUG(logger, message) logger.debug(message, __FILE__, __LINE__)
#define LOG_INFO(logger, message) logger.info(message, __FILE__, __LINE__)
#define LOG_WARNING(logger, message) logger.warning(message, __FILE__, __LINE__)
#define LOG_ERROR(logger, message) logger.error(message, __FILE__, __LINE__)// 测试代码
int main() {Logger logger(LogLevel::DEBUG);LOG_DEBUG(logger, This is a debug message.);LOG_INFO(logger, This is an info message.);LOG_WARNING(logger, This is a warning message.);LOG_ERROR(logger, This is an error message.);return 0;
}达到的效果