商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Ubuntu环境下C++程序如何进行日志记录

Ubuntu环境下C++程序如何进行日志记录

  发布于2026-07-19 阅读(0)

扫一扫,手机访问

在Ubuntu环境下做C++开发,日志记录几乎是绕不开的环节——无论是调试阶段的临时输出,还是生产环境下的问题追踪,都需要一套靠谱的日志方案。常见的做法有三种,从最轻量的标准库,到功能丰富的第三方库,再到系统级别的syslog,各有各的用武之地。下面逐一拆解。

用iostream手搓日志

最简单直接的方式,就是借助C++标准库里的iostream和fstream。打开一个文件,往里写字符串,完了再关掉——听起来跟写个txt文件没什么两样。确实,对于小工具或者快速原型,这种办法够用,而且无需额外依赖。

#include 
#include 

int main() {
    std::ofstream log_file("log.txt");
    if (log_file.is_open()) {
        log_file << "This is a log message." << std::endl;
        log_file.close();
    } else {
        std::cerr << "Unable to open log file." << std::endl;
    }
    return 0;
}

不过话说回来,这种方案在真实项目中几乎撑不住场面。没有日志级别区分,没有轮转策略,多线程并发写入时还会遇到数据错乱——生产环境要是这么干,出了问题排查起来会相当痛苦。

引入第三方库:spdlog

当你需要日志级别、格式化输出、文件轮转这些“正经”功能时,就该请第三方库出场了。spdlog是C++社区里非常流行的一个选择,轻量、头文件为主、性能也不错。在Ubuntu上安装很简单:

sudo apt-get install libspdlog-dev

装好之后,几行代码就能跑起来:

#include 
#include 
#include 

int main() {
    auto logger = spdlog::basic_logger_mt("logger", "logs/basic-log.txt");
    spdlog::set_level(spdlog::level::info); // 设置全局日志级别为info
    logger->info("Welcome to spdlog!");
    logger->error("Some error message with arg: {}", 1);
    return 0;
}

注意,这里用了basic_logger_mt,后缀mt表示多线程安全。如果你只有单线程场景,也可以用basic_logger_st来省一点开销。spdlog支持同步/异步日志、控制台输出、syslog后端等多种sink,扩展性很强。多数中小型项目用spdlog就足够了,唯一需要权衡的是额外引入的依赖——如果项目对依赖管理很敏感,或者目标环境没有预装spdlog,可能要考虑其他方案。

系统级日志:syslog

如果你的程序需要与系统日志系统集成——比如守护进程、服务端程序,或者干脆希望日志被系统日志管理工具统一收集——那么syslog是更合适的选择。Linux系统原生支持,无需额外库,而且日志会自动写入/var/log/syslog或类似位置,配合logrotate还能自动轮转。

#include 
#include 

int main() {
    openlog("my_app", LOG_PID, LOG_USER);
    syslog(LOG_INFO, "This is a log message.");
    syslog(LOG_ERR, "Some error message with arg: %d", 1);
    closelog();
    return 0;
}

使用syslog时,需要注意openlog的第一个参数是程序标识,通常用进程名;第二个参数LOG_PID会在每条日志里附带进程ID,方便多进程场景下定位。另外,日志级别与系统syslog级别对应,比如LOG_ERRLOG_WARNINGLOG_INFO等。优点是零依赖、标准化,缺点是灵活性较差——无法自定义日志文件路径,格式化能力也有限。

三种方案没有绝对的优劣,关键看场景。简单测试或临时工具,iostream够用;需要可控、可扩展的日志体系,spdlog是首选;想融入系统级管理,syslog自然就是那个答案。实际项目中,不少人也会混合使用:开发阶段用spdlog输出到控制台,正式部署时再切到syslog。总之,先想清楚你要什么,再选工具,才是正解。

本文转载于:https://www.yisu.com/ask/47187112.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注