Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
c++如何实现一个简单的日志库_c++日志系统设计与实现思路_创想鸟

c++如何实现一个简单的日志库_c++日志系统设计与实现思路

首先定义日志级别枚举,设计包含时间戳、级别、文件名、行号、函数名和消息的格式,通过单例Logger类管理输出目标与级别过滤,结合宏自动注入源码信息,实现简洁调用,并可选加锁保证线程安全。

c++如何实现一个简单的日志库_c++日志系统设计与实现思路

实现一个简单的C++日志库,核心目标是让开发者能方便地输出带有级别、时间戳和来源信息的调试或运行日志。不需要依赖第三方库的情况下,通过封装文件操作、字符串格式化和线程安全机制,就可以构建一个轻量但实用的日志系统。

1. 定义日志级别

日志级别用于区分消息的重要程度,常见级别有:DEBUG、INFO、WARN、ERROR、FATAL。可以通过枚举来定义:

enum class LogLevel {    DEBUG,    INFO,    WARN,    ERROR,    FATAL};

在输出时根据级别决定是否写入,也可以控制输出颜色(如终端中ERROR用红色)。

2. 日志格式设计

每条日志通常包含:时间戳、日志级别、源文件名、行号、函数名和用户消息。例如:

立即学习“C++免费学习笔记(深入)”;

[2025-04-05 10:23:45] [ERROR] main.cpp:42 in main: Failed to open file

可通过__FILE__、__LINE__、__func__宏自动获取位置信息。时间戳使用std::chrono和std::put_time生成。

3. 核心日志类设计

创建一个单例风格的Logger类,管理输出目标(控制台或文件)、日志级别过滤和格式化输出。

class Logger {public:    static Logger& instance() {        static Logger logger;        return logger;    }
void set_level(LogLevel level) { level_ = level; }void set_output_file(const std::string& filename);void log(LogLevel level, const char* file, int line,         const char* func, const std::string& msg);

private:LogLevel level_ = LogLevel::DEBUG;std::ofstream filestream;bool usefile = false;};

log方法中先判断当前级别是否需要输出,再格式化内容并写入目标流。

4. 简化调用的宏封装

直接调用log函数冗长,使用宏自动注入文件、行号等信息:

#define LOG_DEBUG(msg) Logger::instance().log(LogLevel::DEBUG, __FILE__, __LINE__, __func__, msg)#define LOG_INFO(msg)  Logger::instance().log(LogLevel::INFO,  __FILE__, __LINE__, __func__, msg)#define LOG_ERROR(msg) Logger::instance().log(LogLevel::ERROR, __FILE__, __LINE__, __func__, msg)

这样调用就变得简洁:

LOG_ERROR("Failed to connect to server");

5. 可选增强功能

进阶功能可按需添加:

线程安全:在log方法中加互斥锁,防止多线程输出混乱。异步写入:将日志放入队列,由后台线程写入磁盘,避免阻塞主逻辑。自动分割日志文件:按大小或日期创建新文件,避免单个文件过大。支持格式化参数:类似printf,使用std::vsnprintf处理可变参数。

基本上就这些。一个简单日志库的关键是清晰的接口和稳定的输出格式。不复杂但容易忽略的是错误处理,比如文件无法打开时应自动回退到控制台输出。从简单开始,逐步扩展,就能构建出适合项目的日志系统。

以上就是c++++如何实现一个简单的日志库_c++日志系统设计与实现思路的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1486068.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++怎么使用std::string_view来优化字符串处理性能_C++字符串优化与性能提升方案
上一篇 2025年12月19日 09:29:06
c++中mutex是什么意思_介绍C++中mutex互斥锁的作用与使用方法
下一篇 2025年12月19日 09:29:15

相关推荐

  • 研祥智能亮相2025工博会:工业智能,此刻正在爆发!

    研祥智能亮相2025工博会:工业智能,此刻正在爆发!研祥智能亮相2025工博会:工业智能,此刻正在爆发!研祥智能亮相2025工博会:工业智能,此刻正在爆发!研祥智能亮相2025工博会:工业智能,此刻正在爆发!

    9月23日,2025工博会正式拉开帷幕 创新浪潮席卷申城 人流与焦点在此交汇 在6.1HD005展位上 研祥智能开启了一场关于工业智能化的深度对话 全场景解决方案与自主可控成果重磅登场 本次展会,研祥智能携“5+N”全场景工业制造解决方案及20余款新品惊艳亮相,精准聚焦锂电制造、低空经济、智慧工厂、…

    2026年9月26日 • 用户投稿
    200
  • Claude如何优化金融分析 Claude财经数据解读模型

    Claude如何优化金融分析 Claude财经数据解读模型Claude如何优化金融分析 Claude财经数据解读模型Claude如何优化金融分析 Claude财经数据解读模型Claude如何优化金融分析 Claude财经数据解读模型

    在金融分析领域使用claude类ai模型需注意四个关键点。一要确保输入数据质量高且结构化,如提供具体财报数字而非模糊描述;二要通过引导式提问促进深度分析,例如要求比较公司roe变化及原因;三要结合术语与通俗表达适应不同场景,比如让非专业者理解贝塔系数;四要注意模型局限性,不盲目依赖结论、关注数据时效…

    2026年9月26日 • 用户投稿
    100
  • 洗护行业不卷价格,差异化创新谋未来

    洗护行业不卷价格,差异化创新谋未来洗护行业不卷价格,差异化创新谋未来洗护行业不卷价格,差异化创新谋未来洗护行业不卷价格,差异化创新谋未来

    9月25日,由中国家电网主办的“净·呵护多·自由悦·美居2025中国家庭洗衣及烘护行业高峰论坛”在山东济南召开,来自澳柯玛、博世家电、卡萨帝、海尔、海立、海信、leader、小天鹅、荣事达、西门子家电、tcl、东芝、小鸭集团的洗护行业上下游企业代表,以及渠道合作伙伴京东家电家居、数据机构gfk中国、…

    2026年9月26日 • 用户投稿
    000
  • OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级

    OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级

    近期,oppo 正式对外发布消息,find x8 ultra 手机将获得满血版 coloros 15 系统的更新。这次更新涵盖了许多新功能和改进,特别是在影像技术上取得了长足的进步。 在摄影方面,本次更新引入了视频专家模式,以更好地迎合专业用户的个性化需求。原有的电影模式已经升级为专业的视频模式,允…

    2026年9月26日 • 用户投稿
    200
  • Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作

    Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作

    重置Safari可解决运行缓慢、加载异常等问题。首先通过Safari偏好设置清除历史记录与网站数据,并恢复各项功能至默认值;若问题依旧,可使用终端命令删除偏好文件及缓存实现深度重置;也可通过系统设置一次性清除所有浏览数据与扩展信息,重启后恢复初始状态。 如果您发现Safari浏览器运行缓慢、页面加载…

    2026年9月26日 • 用户投稿
    100
  • 检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?

    检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?

    检查型异常由编译器强制处理,代表可预期的外部问题,如文件不存在;非检查型异常为运行时异常,通常由程序逻辑错误引起,编译器不强制捕获。前者需显式处理或声明,体现健壮性设计;后者应通过预防避免,体现“快速失败”原则。自定义异常时,若调用方可恢复或需处理,应继承Exception;若为内部错误,则继承Ru…

    2026年9月26日 • 用户投稿
    100
  • 产品价格持续下跌,TCL中环H1预亏40亿元-45亿元

    产品价格持续下跌,TCL中环H1预亏40亿元-45亿元产品价格持续下跌,TCL中环H1预亏40亿元-45亿元产品价格持续下跌,TCL中环H1预亏40亿元-45亿元产品价格持续下跌,TCL中环H1预亏40亿元-45亿元

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 7月10日,TCL中环公布2025年上半年业绩预告显示,公司预计上半年归属于上市公司股东的净亏损在40亿元至45亿元之间,去年同期亏损为30.64亿元;预计扣除非经常性损益后的净亏损为41亿元至…

    2026年9月26日 • 用户投稿
    000
  • 顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!

    顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!

    9 月 23 日至 27 日,2025 年国际医学影像计算与计算机辅助介入协会(miccai)年会在韩国隆重举行。在此期间,上海科技大学生物医学工程学院创始院长、联影智能联席 ceo 沈定刚荣获大会颁发的 miccai enduring impact award (eia) 持久影响力奖,成为该奖项…

    2026年9月26日 • 用户投稿
    000
  • 2025高分辨率图片生成AI工具Top10榜单

    2025年高分辨率AI图像生成工具将实现技术突破,榜单预测包括DeepImage AI Pro 2025、NVIDIA AI Imaginer 5.0等十款产品,涵盖生成质量、速度、细节控制、Prompt理解与软件兼容性五大维度;当前技术瓶颈集中在计算资源需求大、算法优化难、数据标注成本高,而未来趋…

    2026年9月26日
    200
  • 创号仅20天 “鸡排哥”粉丝突破100万

    10月12日,江西景德镇的炸鸡排摊主李俊永,凭借“鸡排哥”这一身份迅速走红网络。 他的抖音账号自开通仅20天,粉丝量已突破100万大关,累计获赞超过519.4万,其中单条视频最高点赞数达到110万。 在国庆假期第一天,“鸡排哥”更是创下单日涨粉14.3万的纪录,成为2025年秋季最炙手可热的现象级网…

    2026年9月26日
    000
  • 《超级忍 反攻的斩击》数字豪华版抢先体验现已开启 发售宣传片同步公开

    《超级忍 反攻的斩击》数字豪华版抢先体验现已开启 发售宣传片同步公开《超级忍 反攻的斩击》数字豪华版抢先体验现已开启 发售宣传片同步公开《超级忍 反攻的斩击》数字豪华版抢先体验现已开启 发售宣传片同步公开《超级忍 反攻的斩击》数字豪华版抢先体验现已开启 发售宣传片同步公开

    世嘉2D横版忍者动作游戏新作《超级忍 反攻的斩击》已于今日8月26日开启抢先体验,所有已购买本作数字豪华版的用户皆可开始游玩完整内容。 本作在评测汇总网站Metacritic上获得了89分的成绩,在8月29日发售前就已获得全球媒体的高度评价。(本评分为截至8月26日的Xbox版评分。) 此外,本作的…

    2026年9月26日 • 用户投稿
    000
  • synchronized 关键字的实现原理是什么?它是如何保证线程安全的?

    synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?

    synchronized 是 Java 中保证线程安全的核心机制,其本质是通过 JVM 内置的 Monitor(监视器)实现互斥访问。当多个线程竞争同步资源时,synchronized 依靠对象头中的 Mark Word 和锁升级机制(偏向锁 → 轻量级锁 → 重量级锁)动态调整锁的实现方式,以平衡…

    2026年9月26日 • 用户投稿
    200
  • 新机遇、新体验、新服务,HarmonyOS 游戏领启未来

    新机遇、新体验、新服务,HarmonyOS 游戏领启未来新机遇、新体验、新服务,HarmonyOS 游戏领启未来新机遇、新体验、新服务,HarmonyOS 游戏领启未来新机遇、新体验、新服务,HarmonyOS 游戏领启未来

    【中国,上海,2025年7月31日】2025年中国国际数字娱乐产业大会(cdec)高峰论坛顺利举行。华为终端云服务互动媒体bu总裁张思建在题为《技术赋能体验创新 harmonyos 游戏领启未来》的演讲中指出,随着harmonyos 5设备数量突破千万大关,鸿蒙系统5已成功通过大规模市场验证,整体用…

    2026年9月26日 • 用户投稿
    400
  • 率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元

    率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元

    在人工智能技术迅猛发展的背景下,从大规模模型训练到广泛的边缘计算应用,数据以前所未有的速度不断产生。根据 idc 的预测,至 2028 年全球将生成高达 394zb 的数据,其中生成式 ai 贡献超过 100zb。面对如此庞大的数据体量,如何实现安全存储与高效管理,成为亟需解决的关键问题。对于承载数…

    2026年9月26日 • 用户投稿
    100
  • 抖音PC版如何使用直播功能_抖音PC版开启直播的详细教程

    抖音PC版如何使用直播功能_抖音PC版开启直播的详细教程抖音PC版如何使用直播功能_抖音PC版开启直播的详细教程抖音PC版如何使用直播功能_抖音PC版开启直播的详细教程抖音PC版如何使用直播功能_抖音PC版开启直播的详细教程

    首先下载安装抖音直播伴侣,然后通过手机扫码登录,接着配置场景、音视频设备及推流参数,最后填写标题并点击“开始推流”即可成功开启电脑直播。 如果您想在电脑上进行直播,以获得更好的画面质量、音效控制和互动体验,但不清楚如何操作,可以按照以下步骤在抖音PC版开启直播。 本文运行环境:联想拯救者Y9000P…

    2026年9月26日 • 用户投稿
    200
  • 豆包AI是否能生成代码 豆包代码生成功能及其适用范围分析

    本文将围绕豆包AI是否能生成代码这一问题展开探讨。我们将首先确认其代码生成能力,随后详细讲解如何有效利用此功能,并通过步骤拆解,帮助用户掌握操作过程。最后,会分析该功能的适用场景与潜在局限,以便用户能更全面地理解和运用。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Deep…

    2026年9月26日
    100
  • 如何利用Nginx日志进行安全监控

    如何利用Nginx日志进行安全监控如何利用Nginx日志进行安全监控如何利用Nginx日志进行安全监控如何利用Nginx日志进行安全监控

    保障网站和应用安全,Nginx日志安全监控至关重要。本文将详细介绍关键步骤和最佳实践。 一、Nginx日志配置与启用 默认配置: Nginx通常已启用访问日志和错误日志记录。请确保日志文件配置正确并妥善存储。日志格式: 建议使用标准日志格式,方便后续分析。例如: log_format main ‘$…

    2026年9月26日 • 用户投稿
    000
  • 从旅行人像到舞台追焦:vivo X300系列如何成为全场景旗舰拍照利器

    从旅行人像到舞台追焦:vivo X300系列如何成为全场景旗舰拍照利器从旅行人像到舞台追焦:vivo X300系列如何成为全场景旗舰拍照利器从旅行人像到舞台追焦:vivo X300系列如何成为全场景旗舰拍照利器从旅行人像到舞台追焦:vivo X300系列如何成为全场景旗舰拍照利器

    当2025年拍照手机推荐再度成为热议焦点,面对“旗舰拍照手机有哪些”以及“拍照最强的手机排名如何”等高频提问,vivo x300系列凭借其突破性的影像实力给出了极具说服力的答案。本文将结合详实的产品参数,按不同价位段深入剖析vivo x300与x300 pro如何精准满足多样化的拍摄需求。 vivo…

    2026年9月26日 • 用户投稿
    000
  • MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸

    MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸

    首先启用系统自带动态桌面,进入“系统设置”>“墙纸”,选择“动态”类别并预览应用;其次可通过HEIC格式Live Photo设为动态壁纸,需从iPhone同步后导出原片并拖入墙纸设置;若想使用视频壁纸,则需借助Wallpaper Engine等第三方工具导入视频并设为背景;最后高级用户可编写A…

    2026年9月26日 • 用户投稿
    000
  • 构建健壮的Java用户输入:Scanner整数解析与异常捕获

    构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获

    本文深入探讨了Java Scanner在获取整数输入时,当用户输入非整数数据可能引发的InputMismatchException。我们将解释此异常的产生机制,并提供一种健壮的解决方案:通过结合try-catch语句有效捕获并处理该异常,从而避免程序崩溃,提升用户交互的稳定性与友好性。 1. Jav…

    2026年9月26日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信