如何手动刷新升压日志?

2024-03-11

我正在使用 boost 1.54.0 中的 Boost.Log,看看它是否适合我的应用程序。一般来说,我的缓冲没有问题,所以我不想打开 auto_flush 或任何东西......但我注意到在我调用之前记录的消息fork()是重复的,我想知道是否是因为它们被缓冲了,当复制进程映像时缓冲区被复制,然后两个进程最终将它们的缓冲区副本写入日志文件......

所以基本上,我只想在调用之前对日志进行一次手动刷新,仅一次fork()以确保内存中没有任何消息。换句话说,我正在寻找类似的东西fflush(), .flush(), << flush等我可以在升压日志上使用。

我确实尝试过使用<< flush与日志,但我仍然收到重复的消息,所以我不能 100% 确定它是否正在刷新并且重复项是由其他问题引起的,或者它是否以某种方式默默地忽略了<< flush...

Edit:

我环顾四周,发现 boost log 不是安全的。所以我应该补充一点,我是not尝试在父进程和子进程中使用相同的日志。我有两种分叉场景 - 一种是父级立即终止,子级继续(这样应该是安全的),另一种是子级应该打开自己单独的日志文件,这样也应该是安全的...但我需要弄清楚如何close日志文件接收器,然后打开一个新的接收器(在不同的文件上)。我想关闭水槽也可能是强制冲水的一种方法......?


好吧...我必须深入研究一下 boost 代码(但不是太多),我发现了这个,这似乎有效:

你打电话时add_file_log(strLogFilename)它返回一个shared_ptr<sink> where sink是您的水槽类型(例如,shared_ptr< synchronous_sink< text_file_backend > >)。如果您“手动”创建接收器,那么当然您也有一个指向它的指针......似乎接收器和后端都有一个.flush()方法。我不确定如何直接获取后端的副本来调用其刷新,但接收器上的刷新似乎只是简单地调用其后端上的刷新,因此可以工作。以下是我发现对我有用的一些示例代码:

shared_ptr< synchronous_sink< text_file_backend > > pLogSink = add_file_log(strLogFilaname);
BOOST_LOG_TRIVIAL(debug) << "Boost log!";

// other work goes here

BOOST_LOG_TRIVIAL(debug) << "About to fork...";
if (pLogSink)
  pLogSink->flush();
pid_t pid = fork();

if (pid < 0)
  // handle error
else if (pid > 0)
  exit(EXIT_SUCCESS); // parent terminates
assert(0 == pid); // child continues

BOOST_LOG_TRIVIAL(debug) << "Fork succeeded!";

使用这种方法,我现在只能看到每条日志消息一次。当然,请记住有关将 Boost.Log 与 fork() 混合的警告...http://boost-log.sourceforge.net/libs/log/doc/html/log/rationale/fork_support.html http://boost-log.sourceforge.net/libs/log/doc/html/log/rationale/fork_support.html

在我的示例中,它是安全的,只是因为父进程在分叉后立即退出,根本不接触日志(分叉后)。因此,日志不存在任何争用。

尽管存在限制,但我可以在几种情况下使用它:1)守护进程(实际上,这就是我在这里尝试做的),2)fork-exec 模式(其中does根据上面的 URL,可以与 Boost.Log 正常工作),或者 3)子进程立即关闭文件接收器,并为日志打开一个新的接收器,该日志指向另一个文件(与父进程正在使用的文件不同) - Ithink第三种情况应该是安全的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何手动刷新升压日志? 的相关文章

  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 为什么 BOOST_FOREACH 不完全等同于手工编码的?

    From 增强文档 http www boost org doc libs 1 48 0 doc html foreach html foreach introduction what is literal boost foreach li
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • Django - 默认字段值取决于其他字段值

    我在设置默认字段值时遇到问题 我想做的事 我希望 Packages 类中的价格成为 Bill 类中 PriceNoTax 的默认值 正如你所看到的 所有三个类都是 逻辑上有联系的 示例 账户 1 有一个 id 为 1 的包裹 该包裹的价格为
  • 高斯模糊和 FFT

    我正在尝试为学校项目实施高斯模糊 我需要同时实现 CPU 和 GPU 来比较性能 我不太确定我是否理解高斯模糊的工作原理 所以我的问题之一是 如果我理解正确的话 这就是我现在所做的 我使用维基百科中的方程http en wikipedia
  • 实体框架引用不会自动加载

    在 ADO Net 实体框架中 我有一个对象 它有 4 个对其他对象的引用 由于某种原因 当我查询这些引用时 其中两个会自动加载 如预期 并且其中两个始终返回 null 奇怪的是 当我manually要求加载参考文献 他们加载得很好 举个例
  • 使用动词时工作目录不起作用

    Using Start Process when Verb被使用时 Workingdirectory选项不起作用 新的 powershell 始终启动于C WINDOWS system32 为什么是这样 我怎样才能做到这一点而不需要额外的c
  • 如何使用 powershell 循环创建 XML 文件的元素?

    我要创建 xml 文件 我从 ini 文件中选取的 xml 元素 我的 ini 文件超过 1 个 我尝试了这个 但仍然只能创建 1 个元素 我的 ini 文件中有 2 种类型的内容文件 第一 Product Name NB A String
  • 垂直 ViewPager2 与 RecyclerView 滚动问题

    我使用的是 ViewPager2 它有两个垂直方向的片段 当用户向下滑动到第二个片段时 有一个 RecyclerView 以相同的垂直方向滚动内容 问题是当我滚动 RecyclerView 的内容时 有时 ViewPager2 捕获滚动事件
  • 如何将 unicode 字符变成小写字母

    我在 VC MFC 中将 unicode 字符转换为小写字母时遇到问题 我在 CString 变量中有 unicode 字符 所以 使用英语 MakeLower 工作正常 我得到小写字母 但它无法将 unicode 字符转换为小写 我确实尝
  • 如何获得whenComplete和thenCompose的组合效果?

    我试图想出一个具有以下综合效果的 CompletableFuturewhenComplete and thenCompose 具体来说 返回一个CompletionStage而不仅仅是结果 类似于thenCompose 即使前一阶段异常完成
  • 我的程序在打开该活动时给出“应用程序不断停止”的错误是什么?

    应用程序正常打开 但在打开此活动时显示 应用程序不断停止 我不明白有什么问题 也许API级别与calendar get 不兼容 如果是这样我该如何修复它 public class SearchRide extends AppCompatAc
  • PHPUnit生成的测试骨架路径

    是否可以通过 sculpture test 命令告诉 phpunit 将生成的测试框架文件放在哪里 甚至可以告诉 phpunit 重复目录结构吗 以免说我有用于测试的文件lib model SomeClass php我希望 phpstorm
  • 立即在 Android 上显示自动完成功能

    Android 自动完成功能仅在两个字母后启动 如何才能在刚刚选择字段时显示列表 要使自动完成功能在焦点上显示 请添加焦点侦听器并在字段获得焦点时显示下拉菜单 如下所示 editText setOnFocusChangeListener n
  • 使用 HtmlService 在 google apps 脚本中保存状态的位置

    我有以下发布的网络应用程序code gs var queryString function doGet e queryString e queryString logger only works if the return value is
  • 使用 NancyFX 进行模型验证

    我真的很习惯 ASP NET MVC 方法 用相应的属性注释模型 MVC 验证它并更新 ModelState Errors ModelState 在视图上可用 因此可以向用户显示错误 我还没有找到相关信息wiki https github
  • msxml3.dll错误'80072ee2'操作超时

    我有一个经典的 ASP 页面 它读取外部 rss 提要 xml 文档 然后将其显示在网页上 在我的网站转移到新服务器之前 这一切都工作正常 我认为现在是 Windows 2008 我的脚本现在超时了 我认为问题实际上并不是因为我增加了超时值
  • 如何从字符串中删除变音符号(变音符号)?

    如何转换字符串 例如P li lu ou k k p l belsk dy into Prilis zlutoucky kun upel dabelske ody 源字符串采用 Unicode 因此原则上应该可以使用规范化 分解来分隔元音变
  • 如何查看 SQL 2008 锁和阻塞表

    在我的应用程序的 ASP NET 执行期间 SQL 2008 Express 似乎持有一些锁定 我得到 Timeout expired The timeout period elapsed prior to completion of 操作
  • 为什么 Java 类型擦除没有阻止此代码编译

    我有一个类定义了以下两种方法 public Map
  • 如何让 scalac 告诉我是否有未使用的变量?

    我刚刚注意到代码中的一个错误 我创建了一个新变量 但后来未能实际使用它 我以为 scalac 会告诉我我的新变量未被使用 但情况似乎并非如此 在进行少量谷歌搜索 手册页后 我找不到任何有关启用警告的信息 我该怎么做才能启用此类警告 这个东西
  • 使用Javascript读取外部文件

    我有一个可变长度名称的外部文本文件配置文件 txt包含以下格式的信息 Jason Red Tyrannosaurus Zack Black Mastodon Billy Blue Triceratops Trini Yellow Griff
  • 如何手动刷新升压日志?

    我正在使用 boost 1 54 0 中的 Boost Log 看看它是否适合我的应用程序 一般来说 我的缓冲没有问题 所以我不想打开 auto flush 或任何东西 但我注意到在我调用之前记录的消息fork 是重复的 我想知道是否是因为