问题标签 [boost-log]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
986 浏览

c++ - 在自定义提升日志格式函数中格式化范围属性

我正在使用自定义格式化功能,并试图弄清楚如何格式化范围属性。我发现的 boost 文档中的示例适用于 lambda 表达式格式化程序,我不知道如何在格式化程序函数中使用它们。现在我成功地使用了时间戳等属性,但是范围属性让我无法理解。

0 投票
1 回答
242 浏览

boost - Boost::log::string_literal construction issue

I'm trying unsuccessfully to use the macro BOOST_LOG_NAMED_SCOPE with no hard-coding (e.g no BOOST_LOG_NAMED_SCOPE("bla"), but BOOST_LOG_NAMED_SCOPE(some_variable); this macro uses inside a boost::log::string_literal that have no C'tor for std::string or char*. The only thing it accepts is const char[] (NOT const char*) - which doesn't help me at all because I can't hard-code it - this value must be retrieved from a function.

So, I need to find a way to construct boost::log::string_literal with std::string or char*, or somehow to edit const char[]... (I tried also to create a char[] and cast it to const char[], but failed)

0 投票
1 回答
2029 浏览

c++ - 每个班级都有不同的升压日志接收器

我是提升日志的新手。

我的算法有 4 个主要步骤,我希望在一个文件中记录每个步骤。所以我有4个水槽。我的想法是我可以在每一步都更换水槽。那可能吗?

目前我有looger.h一个全球记录器

是否可以在每一步之后更换水槽?

0 投票
2 回答
1342 浏览

c++ - 使用配置文件时,Boost Log 不显示严重性或按严重性过滤

我一直在尝试让 Boost Log 库使用以下配置文件:

方法。我用:

注册严重性的方法,但这似乎没有任何作用。当我运行代码时,我得到以下输出:

1.[] 常规消息

2.[] 警告严重性消息

3.[] 错误严重性消息

即严重性缺失。当我添加这行代码时:

它按预期工作,即它按上述方式记录,但具有严重性级别。但是,当我尝试在配置文件中按严重性过滤时,它不起作用,并且没有任何内容写入文件,这意味着过滤器不知道“严重性”是什么,因此没有记录与此过滤器匹配。

如何让 Boost Log 使用 init_from_stream 方法处理严重性和过滤严重性?

这是完整的源代码:(改编自 Andrey Semashev,http ://boost-log.sourceforge.net/libs/log/example/doc/tutorial_filtering.cpp )

配置文件如下所示:

[汇.满]

目的地=文本文件

文件名=full.log

格式="%LineID%.[%Severity%] %Message%"

Filter="%Severity% > 3" # 也试过 Filter="%Severity% > info/error etc...

0 投票
1 回答
1516 浏览

c++ - 如何在 Boost::Log 中使用压缩器 Boost::Iostreams 过滤器作为接收器

我正在尝试通过使用boost::iostreams::gzip_compressor. 因此,当我调用时BOOST_LOG(),输出会即时压缩。这是我到目前为止所尝试的:

我觉得我应该以某种方式 1) 将整个 filtering_ostream 作为接收器,而不仅仅是file

2)以某种方式推动记录器接收器而不是filefiltering_ostream.

有人可以指出我正确的方向吗?谢谢!

0 投票
1 回答
6786 浏览

c++ - 使用 Boost 同时记录到控制台和文件

我需要帮助来初始化 boost 日志框架,以同时记录到命名日志文件和控制台 - (命名日志文件不需要定期轮换或许多 boost 教程中的任何花哨设置)。

日志记录文本应该同时发送到两个接收器,但是我需要稍微不同地格式化控制台输出(因为它将被用户查看。)我能够使用boost 示例代码获得日志到 2 个独立接收器工作的基础知识. 对于我需要做的事情来说,它过于复杂,而且就访问适当的记录器而言,它确实令人困惑。我需要做的就是将带有时间戳的消息发送到日志文件,并在没有时间戳或换行符的情况下将相同的信息发送到控制台日志(仅像我通常使用的那样显式地放入新行<< std::endl)。我真的很想坚持使用 boost 的日志框架,因为它提供了未来扩展的灵活性。

在这个例子中,我尝试tail -f了日志文件——但是日志输出似乎没有在每个日志条目后自动刷新。尽管这对于文件日志来说不是很重要,但这对于控制台输出流来说至关重要,因为它代表了用户将要监视的实时活动。

任何帮助甚至更好,一些非常简单的示例代码来获得基础工作非常感谢。

我设置日志记录的方式(根据上面的链接)如下所示,我想用控制台记录器替换这些已注册的接收器之一 - 但我不确定如何。我希望控制台记录器具有自动刷新功能。

0 投票
2 回答
1988 浏览

c++ - Boost Log 运行时优化

我正在为我的应用程序的日志记录平台使用 Boost-Log 和全局严重性记录器。分析表明,boost::log::v2s_mt_posix::core::open_record最多可以占用总执行时间的 25%。

我确实有许多日志消息,但我不希望它们如此昂贵,因为它们的严重性较低并且已被过滤

有没有办法让这些消息在运行时不那么昂贵?(再次:我希望即使在过滤时也会有很小的开销,当然在未过滤时会有更大的开销)。

通过创建一些包装宏,编译时相对容易“修复”这个问题。

更新了示例工作代码:

使用参数运行0不会打印任何日志消息,但与注释掉 LOG 消息相比,它需要两倍(!)的时间。

0 投票
1 回答
2150 浏览

c++ - 如何在自定义格式化函数中使用 boost::log::expressions::format_date_time?

要在格式化程序中格式化时间戳,可以简单地编写

但是如何在这样的自定义格式化函数中使用 boost::log::expressions::format_date_time :

0 投票
3 回答
2851 浏览

c++ - 如何跨 DLL 边界使用 Boost.Log?

我正在尝试将Boost.Log集成到一个相当大的应用程序中,该应用程序由一个从 DLL 动态加载插件的主应用程序组成。最初的想法是将日志源传递给插件,以便它们可以添加日志消息。但是,一旦来自 DLL 的代码尝试将消息记录到提供的源,应用程序就会因访问冲突而崩溃。

方法一

以下最小示例说明了该问题:

logFromDll单独的(DLL)项目中定义的位置:

dll.cpp

如上所述,这会在logFromDll(使用 Visual Studio 2010 编译)中因访问冲突而崩溃。

方法二

Boost.Log 提供了一种“全局存储”日志源的机制:

声明了全局记录器后,可以确保从应用程序代码的任何位置都可以线程安全地访问该记录器实例。该库还保证全局记录器实例即使跨模块边界也是唯一的。

听起来和我需要的完全一样。所以我设置了以下示例:

记录器.h

主文件

dll.cpp

这不会崩溃,但会产生以下输出:

也就是说,我在 main.cpp 中设置的自定义格式仅在我从主项目登录时应用。来自 DLL 项目的任何日志都使用默认格式进行格式化。

那么,如何以正确应用我在主项目中设置的所有(格式)选项的方式跨 DLL 边界执行日志记录?

0 投票
0 回答
896 浏览

c++ - Boost Log - 具有严重性的文本格式

我在boost-users 邮件列表上问了这个问题,但不幸的是从未得到回复。希望我在这里有更好的运气。

我正在尝试以文本方式指定格式(例如,keywords::format = "blahblah",而不是使用已编译的表达式)。

这个想法是可以通过命令行参数或通过配置文件轻松重新配置格式,而无需重新编译。但是,似乎在使用自定义的 severity_level 枚举时指定 %Severity% 的任何内容根本不会被输出。

以 boost_1_55_0/libs/log/example/keywords/main.cpp 中的示例为例

只需将第 86 行更改为:

将展示我相信我正在努力解决的问题。

我怀疑核心不知道自定义 Severity 属性,因为它尚未注册,因此无法将 %Severity% 解析为任何格式化程序。相比之下,下面的 add_file_log 确实正确输出了严重性级别,因为它使用了编译的表达式,因此能够推断出需要做什么(我在那个假设中是否正确)?

如果不滚动我自己的属性类,我似乎无法添加属性来解决这个问题。如何添加与使用 BOOST_LOG_ATTRIBUTE_KEYWORD 声明的严重性相关的属性或格式化程序?我认为值得注意的是,如果我在第 123 行将模板参数删除到 severity_logger 以使其匹配:

然后它会演变为标准 int 而不是 enum,并且输出被“正确”视为 - 作为 int 而不是人类可读的字符串。虽然现在这没问题,但如果可能的话,我当然希望它是人类可读的。这与 boost_1_55_0/libs/log/example/settings_file/main.cpp 中的示例一样。