全面监控:系统日志分析与记录

全面监控:系统日志记录

系统日志是记录计算机系统各种活动和事件的文件或数据库。它们包含了系统的运行状态、错误信息、警告、用户操作记录等。

系统管理员和软件开发人员经常使用系统日志来诊断问题、监视系统性能和跟踪用户活动。

日志记录通常包括时间戳、事件类型、事件描述以及相关的详细信息。

通过分析系统日志,可以及时发现并解决系统故障、安全漏洞和其他问题

在实际的开发中 ,是有专门的开源框架的 , 我们只需要进行相应的部署和应用 。日志系统实际上很简单 , 没什么技术含量 。就是一些简单的输入输出。

目的就是,我们在打印日志的时候 , 不需要进行手动的 std::cerr""<<std::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;
}

达到的效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

I. Integer Reaction

Problem - I - Codeforces 看到最小值最大值&#xff0c;二分答案。 思路&#xff1a;每次二分时开两个集合&#xff0c;分别表示 0 0 0颜色和 1 1 1颜色。如果是 c c c颜色&#xff0c;先将值存入 c c c颜色&#xff0c;之后在 ! c !c !c颜色中找大于等于 m i d − a mid - a…

软件设计师笔记(三)-设计模式和算法设计

本文内容来自笔者学习zst 留下的笔记&#xff0c;都是零碎的要点&#xff0c;查缺补漏&#xff0c;希望大家都能通过&#xff0c;记得加上免费的关注&#xff01;谢谢&#xff01;本章主要以下午题出现形式为主&#xff01; 文章编辑于&#xff1a;2024-5-13 13:43:47 目录 1…

数据分离和混淆矩阵的学习

1.明确意义 通过训练集建立模型的意义是对新的数据进行准确的预测&#xff08;测试集的准度高才代表good fit&#xff09;&#xff1b; 2.评估流程 3.单单利用准确率accuracy进行模型评估的局限性 模型一&#xff1a;一共1000个数据&#xff08;分别为900个1和100个0&#x…

Adobe After Effects AE v24.3.0 解锁版 (视频合成及视频特效制作)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

AI网络爬虫:用kimichat自动批量提取网页内容

首先&#xff0c;在网页中按下F12键&#xff0c;查看定位网页元素&#xff1a; 然后在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个爬取网页内容的Python脚本&#xff0c;具体步骤如下&#xff1a; 在F盘新建一个Excel文件&#xff1a;提示词…

ubuntu 22.04 安装 RTX 4090 显卡驱动 GPU Driver(PyTorch准备)

文章目录 1. 参考文章2. 检查GPU是Nvidia3. 卸载已有驱动3.1. 命令删除3.2. 老驱动包 4. 官网下载驱动5. 运行5.1. 远程安装关闭交互界面5.2. 运行5.3. 打开交互界面 6. 检测与后续安装 1. 参考文章 https://blog.csdn.net/JineD/article/details/129432308 2. 检查GPU是Nvid…

Typescript 哲学 - ts模块使用最佳实践

ts的作用域 默认是全局&#xff08;global&#xff09;&#xff0c;这也是为什么在 两个ts文件声明同一个变量报错变量名冲突&#xff0c;解决方法是使某个文件以模块的形式存在&#xff08;文件顶层使用 export 、import &#xff09; In TypeScript, just as in ECMAScript 2…

【软考高项】四十六、项目管理科学计算之运筹学

1、线性规划问题 解题思路&#xff1a; 先把文字转化成图表 最快方式应该是把第一题的4个答案直接代入计算&#xff0c;很快得知X2时利润最大。 A0时&#xff0c;利润5*630 A2时&#xff0c;利润2*25*634 A4时&#xff0c;利润4*23*523 A6时&#xff0c;利润4*2(因为甲的…

【JavaScript超详细的学习笔记-上】JavaScrip超详细的学习笔记,共27部分,12多万字

想要获取笔记的可以点击下面链接获取 JavaScript超详细的学习笔记&#xff0c;点击我获取 一&#xff0c;JavaScript详细笔记 1&#xff0c;基础知识 1-1 基础知识 // 1&#xff0c;标识符命名规则&#xff1a;第一个字母必须是字母&#xff0c;下划线或一个美元符号。不能…

MySQL基础使用指南

难度就是价值所在。大家好&#xff0c;今天给大家分享一下关于MySQL的基础使用&#xff0c;MySQL 是一个流行的关系型数据库管理系统&#xff0c;被广泛应用于各种类型的应用程序开发中。本文中将介绍 MySQL 的基础使用方法&#xff0c;包括创建数据库、创建表格以及进行增删改…

【qt】数值的输入与输出

数值的输入与输出 一.与c中的输入与输出的区别二.QString转数值三.数值转QString1.number()2.asprintf() 四.小项目1.总价和进制2.QSpinBox代替3.QSlider滑动块4.QScrollBar滚动条5.QDial表盘6.QLcdnumber lcd显示 五.总结一下下 一.与c中的输入与输出的区别 在c中我们一般通过…

深入学习指针5,与数组和指针相关的笔试题1(C语言)

前言 Hello,亲爱的小伙伴们&#xff0c;我又来了&#xff0c;&#xff0c;今天呢我们一起来学习一下C语言关于数组和指针的部分经典题目。如果觉得不错的话不要忘了点赞&#xff0c;收藏、关注&#xff0c;你的支持就是我更新的最大动力&#xff01;&#xff01; 好&#xff0…

Java入门基础学习笔记22——程序流程控制

程序流程控制&#xff1a;控制程序的执行顺序。 程序有哪些执行顺序&#xff1f; 顺序、分支和循环。 分支结构&#xff1a; if、switch 循环&#xff1a; for、while、do-while 顺序结构是程序中最简单最基本的流程控制&#xff0c;没有特定的语法结构&#xff0c;按照代码…

防火墙技术基础篇:什么是包过滤技术

什么是防火墙包过滤技术 当数据在网络中传输时&#xff0c;它们被分割成小的单元&#xff0c;称为数据包。防火墙的包过滤是一种基本的网络安全技术&#xff0c;用于检查这些数据包并根据预定义的规则决定是否允许它们通过防火墙。 防火墙包过滤是一种关键的网络安全技术&am…

没有申请域名的情况下,用navicat远程连接我们的服务器的Mysql数据库

我们可以根据公网ip用shell来远程连接 首先我们打开自己买的服务器 例如你看这个&#xff0c;就是我们的公网IP 如果服务器里面没有安装mysql数据库的话&#xff0c;那么我们可以用一个轻量级的docker来安装数据库代替一下 我们用docker弄个轻量级的mysql5.7.36&#xff0c;…

号外!IP SSL证书申请只需十分钟!

IP SSL证书是一种专为IP地址设计的SSL证书&#xff0c;它使得基于IP地址的网站或服务能够实现HTTPS加密&#xff0c;确保数据在传输过程中的安全性和完整性。以下是关于IP SSL证书的一些技术性要点和申请流程概述&#xff1a; 一、IP SSL证书技术要点 1、适用场景&#xff1a…

x264 帧类型决策模块 x264_slicetype_analyse 函数原理分析

======================================================================== ======================================================================== x264帧类型决策 x264 的帧类型决策可以参考:

【Spring】Springmvc学习Ⅲ

# Spring&#xff4d;vc学习Ⅲ 文章目录 一、图书管理系统1. 功能1.1 登录前端接口前端代码后端接口后端代码 1.2 图书列表展示步骤:图书类代码mock数据代码控制层调用代码服务层代码&#xff08;存储除数据库中需要存储的数据&#xff09; 2. 分层控制2.1 三层架构2.2 代码重…

【数据结构】-- 相交链表-环形链表

交叉链表 . - 力扣&#xff08;LeetCode&#xff09; 如果链表的两条链的长度一样&#xff0c;链表两端对齐&#xff0c;解决这个问题将会变得非常简单&#xff0c;直接分别遍历两个链表&#xff0c;想等时的节点即为所求。我们想办法让链表对齐--分别从a和b遍历链表&#xff…

Mysql与Java连接----JDBC

前言: 当将Java与MySQL数据库连接时&#xff0c;JDBC&#xff08;Java Database Connectivity&#xff09;是一种重要的技术。JDBC允许Java应用程序通过标准的数据库访问方式与不同的关系型数据库进行通信&#xff0c;其中包括MySQL。通过使用JDBC&#xff0c;Java开发人员可以…