Base——LogFile类

该博客介绍了LogFile类,包括日志滚动机制、成员变量的详细解释以及一个使用示例。成员变量如basename_、rollSize_等用于控制日志文件的滚动和写入。在LogFile_test.cc的示例中,展示了如何初始化和操作LogFile对象,进行日志写入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 日志滚动

在这里插入图片描述

2. 成员变量

在这里插入图片描述

basename_:~/Documents/build/release-cpp11/bin 的basename为 bin
在这里插入图片描述
rollSize_:文件大小达到rollSize_时,换一个文件
flushInterval_:写入时间间隔
count_:计数器
startOfPeriod_:开始写入的时间,调整为当天零点(原因:比较是否是第二天)
lastRoll_:上次滚动日志文件时间
lastFlush:上次写入文件时间

3. 使用示例 LogFile_test.cc

运行结果:
在这里插入图片描述

在这里插入图片描述

  • 将文件所在路径名拷贝到name数组里:./logfile_test

在这里插入图片描述

  • 根据basename,rollSize初始化一个LogFile对象,其中basename为logfile_test,rollSize大小为196K,LogFile构造函数如下:
    在这里插入图片描述在这里插入图片描述
  • 设置其输出方式 outputFunc,其定义如下:
    在这里插入图片描述
    append()函数定义如下:
    在这里插入图片描述
  • 设置其 flush 方式,其定义如下:
    在这里插入图片描述
    在这里插入图片描述
    其中 file_ 类型为指向File类的智能指针
    在这里插入图片描述

在这里插入图片描述

  • 向文件中写入10000次,写入内容为line + i
    打开其中一个log日志,部分内容如下:
    在这里插入图片描述
<think>嗯,用户遇到了ROS中经典的“RLException:[xxx.launch]isneitheralaunchfile...”错误,这属于ROS开发环境配置的常见问题。从用户提供的引用和当前报错来看,核心矛盾点很明确:roslaunch无法在指定包(jubot_demo)里找到目标启动文件(display_jubot_base_urdf.launch)。用户应该是在Ubuntu+ROS环境下工作,可能是机器人或自动驾驶领域的研究者/开发者。ta的报错信息非常具体,说明已经具备一定ROS基础,但可能对工作空间机制还不够熟悉。特别注意到用户强调“确认launch文件是否存在或名称是否正确”,说明ta更关注问题根源而非简单解决步骤。参考站内四个引用案例,解决方案都指向三个层面:环境变量(特别是ROS_PACKAGE_PATH)、编译状态和文件路径匹配。有趣的是引用[3][4]提到工作空间隔离问题——用户很可能开了多个终端未同步环境变量。需要重点提醒用户:roslaunch报错有时是结果错误,真正原因可能是上游环节缺失。准备分四个维度展开解决方案时,特别要强调“验证包路径”这个最直接的检查项。很多用户会忽略大小写敏感问题(如Launch和launch),这点要体现在命令示例里。对于环境变量配置,准备推荐用户通过.bashrc自动化source,避免每次手动操作。用户似乎比较着急(从问题描述的直接程度推测),所以回复要简明。但安全起见需要包含排查链:从最可能的环境变量问题→编译问题→路径问题层层递进。最后主动提出生成debug命令的选项,这可能会帮助那些卡在细节里的用户。</think> 好的,这个错误 `RLException: [display_jubot_base_urdf.launch] is neither a launch file in package [jubot_demo] nor is [jubot_demo] a launch file name` 表示 ROS 在你的工作空间环境变量 `ROS_PACKAGE_PATH` 中,既找不到一个名为 `jubot_demo` 的包,也找不到该包中名为 `display_jubot_base_urdf.launch` 的 launch 文件。 结合你提供的引用信息和ROS常见错误解决方法,以下是详细排查步骤: **核心解决思路:确保 ROS 环境(尤其是 `ROS_PACKAGE_PATH`)正确设置并能找到你的 `jubot_demo` 包及其内部的 `display_jubot_base_urdf.launch` 文件。** ### 📌 分步解决方案 1. **☑️ 确认 Launch 文件存在及路径正确(首要检查):** * 找到你的 ROS 工作空间(通常是 `~/catkin_ws` 或 `~/jubot_ws`)。 * 进入源码空间 (`src`):`cd ~/<your_workspace>/src` * 找到 `jubot_demo` 包:`cd jubot_demo` * 检查 launch 文件是否存在:`ls launch/` 或者 `ls` * **仔细核对文件名称:** 确保 `display_jubot_base_urdf.launch` 这个文件存在于 `jubot_demo/launch/` 目录下(或包根目录下,虽然不推荐)。检查 **大小写** 和 **拼写** 是否**完全一致**(文件名 `display_jubot_base_urdf.launch` vs. 命令中的名称)。ROS 对文件名大小写敏感。这是最常见的错误源头之一[^1][^2][^3]。 2. **📂 验证 jubot_demo 包已被正确识别为 ROS 包:** * 在 `jubot_demo` 包根目录下:`ls` * 检查 **必须** 存在 `CMakeLists.txt` 文件和一个 `package.xml` 文件。这两个文件是定义一个ROS包的核心标识[^1][^2][^3]。 3. **🛠️ 重新编译工作空间(即使存在CMakeLists.txt/package.xml):** * 返回工作空间根目录:`cd ~/<your_workspace>` * 执行 `catkin_make` 或 `catkin build`(如果你用了 `catkin_tools`):```bash catkin_make ``` * 确保编译**没有错误**(Warning有时可以暂时忽略)。编译过程会将包路径等信息写入工作空间的 `devel` 或 `install` 目录中的设置脚本[^3]。 4. **📍 正确 Source 工作空间设置脚本(最关键步骤!):** * 编译成功后,**每一次打开新的终端**要使用这个工作空间中的包和文件,**都必须**执行 `source` 命令: ```bash source ~/<your_workspace>/devel/setup.bash ``` 对于安装了新ROS版本或特定配置的工作空间可能是: ```bash source ~/<your_workspace>/install/setup.bash ``` * **`~/<your_workspace>` 替换为你的实际工作空间路径(如 `~/jubot_ws`)**。 * **📎 永久生效(推荐):** 为避免每次开新终端都要手动 `source`,将该命令添加到你的 `~/.bashrc` 文件末尾:```bash echo "source ~/<your_workspace>/devel/setup.bash" >> ~/.bashrc ``` 然后执行 `source ~/.bashrc` 使更改立即生效或关闭终端重新打开[^3][^4]。 5. **🆚 验证 `ROS_PACKAGE_PATH` 环境变量:** * 执行:`echo $ROS_PACKAGE_PATH` * 查看输出结果。它应该包含一串以冒号 `:` 分隔的路径。 * **检查:** * 是否包含了 **`~/<your_workspace>/src`** 或者 **`~/<your_workspace>/install`** 路径? * 是否包含了 **`~/<your_workspace>/src/jubot_demo`** 的父级路径(`/src/`)? * 如果**没有**看到你的工作空间路径(尤其是 `/src/`),说明环境设置有问题,请务必严格检查第3和第4步[^3]。 6. **🔍 使用 `rospack find` 和 `roslaunch` 命令验证包可见性:** * **验证包可见性:** 执行 ```bash rospack find jubot_demo ``` * **期望输出:** 应该返回 `jubot_demo` 包的**完整绝对路径**(例如 `/home/yourname/jubot_ws/src/jubot_demo`)。 * **如果报错(例如 `jubot_demo` not found):** 则100%确认是环境设置问题(`source` 或 `ROS_PACKAGE_PATH`),回到第3、4、5步检查。 * **列出包内launch文件(验证文件存在+包路径已被索引):** 如果 `rospack find jubot_demo` 成功,执行: ```bash roscd jubot_demo ``` ```bash rosls jubot_demo/launch/ # 或者直接 `ls launch/` 如果 roscd 进入了包目录 ``` * 查看输出列表中是否包含 `display_jubot_base_urdf.launch`。 * 如果此步骤找不到文件,请**极其仔细**地检查第一步的文件路径和名称[^1][^2][^3]。 7. **🚪 使用完整 Launch 路径(备用方法):** * 如果以上所有步骤都确认无误,ROS应该能找到包。但极端情况下,你可以直接指定launch文件的**完整绝对路径**来启动(这绕过了包查找机制): ```bash roslaunch /absolute/path/to/jubot_demo/launch/display_jubot_base_urdf.launch ``` * **注意:** 这通常是一种“确认文件本身语法没问题”的测试方式,正常开发中应避免,因为它可能隐藏了环境配置错误的根本原因。 ### ✅ 总结关键点 1. **文件存在+名字对:** 确保 `jubot_demo/launch/display_jubot_base_urdf.launch` 文件物理存在且名称拼写(大小写)严格一致。 2. **包定义合规:** `jubot_demo` 包下必须有 `CMakeLists.txt` 和 `package.xml`。 3. **编译过:** 每次在 `src` 下修改了包的结构(如新增launch文件)或 `CMakeLists.txt`/`package.xml`,都需要 `catkin_make`(或 `catkin build`)**重新编译**。 4. **Source 了:** **每一次**新终端里使用包前,都必须 `source devel/setup.bash`(最好加到 `~/.bashrc`)。**这是引发此错误的最常见原因** [^3][^4]。 5. **路径在 ROS_PACKAGE_PATH 里:** `echo $ROS_PACKAGE_PATH` 必须包含你的工作空间 `/src/` 或 `/install/` 路径。 ### 🔍 快速诊断流程 * `rospack find jubot_demo` -> 出错? = **环境没设置好** (严格检查 `source`) 或 **包名字写错/没编译/包定义文件缺失**。 * `rospack find jubot_demo` 成功但 `roslaunch jubot_demo display_jubot_base_urdf.launch` 报原错? = **文件名称/路径错了** 或 **编译后未 `source`**。 * 执行 `roscd jubot_demo && ls launch/` -> 找不到文件? = **文件放错位置或名字写错**。 💡**按照上述步骤仔细检查,尤其是文件位置/名称、重新编译和正确 `source` 环境变量,几乎肯定能解决这个 `RLException` 问题**。如果执行中遇到新报错,请提供详细终端输出。 --- ### ⁉️相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值