标签: boost-log

使用Boost.Log日志库的经验?

我正在考虑开始使用Boost.Log日志库.有人使用Boost.Log吗?请分享您在这方面的经验.

我正在考虑的其他库是Apache log4cxx(安装起来似乎很乏味,但我的队友想要一些简单易用的东西)和Pantheios(同样的问题,因为它适用于额外的前端和后端).

c++ logging boost boost-log

88
推荐指数
3
解决办法
3万
查看次数

Boost Log 2.0:日志中的空严重级别

我正在使用Boost-Log 2.0,它与版本1存在一些差异,我很难输出"Severity"属性.

我正在使用"Boost.Format-style"格式化程序

"%TimeStamp% [%Uptime%] (%LineID%) <%Severity%>: %Message%"
Run Code Online (Sandbox Code Playgroud)

TimeStamp,LineIDMessagecommon_attributes.Uptime是我添加的属性attrs::timer().我认为Severity在使用时会自动添加severity_logger,但显然不是,这是我的问题.我得到空的严重性,例如:

2013-Apr-06 19:21:52.408974 [00:00:00.001337] (3) <>: A warning severity message
Run Code Online (Sandbox Code Playgroud)

注意空<>.我试图添加严重性,register_simple_formatter_factory但后来我得到编译器错误:

error: no matching function for call to ‘register_simple_formatter_factory(const char [9])’
Run Code Online (Sandbox Code Playgroud)

而且我不明白为什么.

这是我的代码:

#include <iostream>


#include <boost/log/common.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/text_file_backend.hpp>
#include <boost/log/sinks/sync_frontend.hpp>
#include <boost/log/sinks/text_ostream_backend.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/formatter_parser.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/severity_feature.hpp>
#include <boost/log/sources/record_ostream.hpp>

#include <boost/log/attributes.hpp> …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-log

25
推荐指数
2
解决办法
1万
查看次数

Boost.Log - 如何配置文本接收器后端以附加到旋转的文件

我有一个sinks::text_file_backend水槽.说我已经有一些旋转的日志文件:

myLog001.log,myLog002.log等

我希望接收器继续写入最后一个旋转的文件 - myLog002.log,附加到其内容并从那里继续旋转.

我只是设法找到,keywords::open_mode = append但这只是附加在现有的myLogX文件之上,使它们更大,当然很难阅读.

可以在Boost.Log中完成吗?

c++ logging boost boost-log

22
推荐指数
1
解决办法
9486
查看次数

Boost.Log与CMake导致未定义的引用错误

我正在尝试在我正在进行的项目中使用新的Boost.Log库.该项目是用CMake构建的.我收到链接错误声称链接器遇到了对Boost.Log的未定义引用

Linking CXX executable main
CMakeFiles/main.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x30): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()'
Run Code Online (Sandbox Code Playgroud)

我有一个简单的hello world测试,但没有出现这些错误.如果我链接Boost.Log库会导致它产生未定义的引用错误?

main.cpp中:

#include <boost/log/trivial.hpp>
int main(int argc, char* const argv[]) {
  BOOST_LOG_TRIVIAL(info) << "Hello World";
}
Run Code Online (Sandbox Code Playgroud)

的CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
FIND_PACKAGE(Boost 1.54 COMPONENTS log REQUIRED)
FIND_PACKAGE(Threads)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ADD_EXECUTABLE(main main.cpp)
TARGET_LINK_LIBRARIES(main ${Boost_LOG_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
Run Code Online (Sandbox Code Playgroud)

编辑:来自cmake和make的详细输出

cmake的:

-- [ /usr/share/cmake-2.8/Modules/FindBoost.cmake:476 ] _boost_TEST_VERSIONS = 1.56.0;1.56;1.55.0;1.55;1.54.0;1.54
-- [ /usr/share/cmake-2.8/Modules/FindBoost.cmake:478 ] Boost_USE_MULTITHREADED = TRUE
-- [ /usr/share/cmake-2.8/Modules/FindBoost.cmake:480 ] Boost_USE_STATIC_LIBS = 
-- [ /usr/share/cmake-2.8/Modules/FindBoost.cmake:482 ] Boost_USE_STATIC_RUNTIME = 
-- [ /usr/share/cmake-2.8/Modules/FindBoost.cmake:484 ] Boost_ADDITIONAL_VERSIONS = …
Run Code Online (Sandbox Code Playgroud)

c++ boost cmake boost-log

22
推荐指数
1
解决办法
1万
查看次数

提升日志文件未写入

我一直在努力使用boost日志 - 我得到了他们写一个日志文件的简单示例(http://boost-log.sourceforge.net/libs/log/example/doc/tutorial_file.cpp).但是,当我尝试将该代码复制到"Logger"类时,我无法将其写入日志文件.我可以看到文件default.log被创建,但它没有任何内容.

我在debian 7 64bit上.一切都编译好 - 编译行是:

g++ -o build/Logger.o -c -std=c++11 -Wall -g -O0 -DBOOST_LOG_DYN_LINK -DDEBUG src/Logger.cpp
g++ -o build/logtest build/Logger.o -lboost_log -lboost_log_setup -lboost_date_time -lboost_thread -lboost_wave -lboost_regex -lboost_program_options
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

Logger.cpp

/*
 * Logger.cpp
 *
 *  Created on: 2011-01-17
 *      Author: jarrett
 */

#include "Logger.h"

namespace logging = boost::log;
namespace sinks = boost::log::sinks;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace attrs = boost::log::attributes;
namespace keywords = boost::log::keywords;

namespace dhlogging {

Logger::Logger(std::string fileName)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-log

16
推荐指数
1
解决办法
6970
查看次数

如何将Boost.Log重定向到文件

我想在并发应用程序中使用简单的日志文件.我已经下载了Boost.Logv2.0并使用编译它Boost 1.53.0.

问题是Boost.Log控制台上的输出.我正在使用BOOST_LOG_TRIVIAL(trace).

有没有一种很好的方法来重定向BOOST_LOG_TRIVIAL到文件?

c++ logging boost-log

14
推荐指数
1
解决办法
8481
查看次数

提升日志以打印源代码文件名和行号

我正在使用Boost(1.55.0)登录我的C++应用程序.我已经能够生成这种格式的日志

[2014-Jul-15 10:47:26.137959]: <debug>  A regular message
Run Code Online (Sandbox Code Playgroud)

我希望能够在生成日志的位置添加源文件名和行号.

[2014-Jul-15 10:47:26.137959]: <debug> [filename:line_no] A regular message
Run Code Online (Sandbox Code Playgroud)

例:

[2014-Jul-15 10:47:26.137959]: <debug> [helloworld.cpp : 12] A regular message
Run Code Online (Sandbox Code Playgroud)

源代码:

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/text_file_backend.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/support/date_time.hpp>
#include <boost/log/attributes/attribute.hpp>
#include <boost/log/attributes/attribute_cast.hpp>
#include <boost/log/attributes/attribute_value.hpp>
#include <boost/make_shared.hpp>
#include <boost/property_tree/ptree.hpp>

namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;

void init()
{
    logging::add_file_log
    (
        keywords::file_name = "sample_%N.log", …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-logging boost-log

14
推荐指数
3
解决办法
8094
查看次数

如何自定义Boost.Log的"TimeStamp"格式

我想得到年 - 月 - 小时:分:秒.分数(2位数),如果我使用"%Y-%m-%d%H:%M:%S.%f",我几乎得到了什么我想要秒的分数(最后一部分)的异常,它在我的Windows XP上显示6位数,我不知道如何获得2位数,任何想法?

format logging boost timestamp boost-log

13
推荐指数
1
解决办法
6355
查看次数

避免在Boost Log中使用漏洞

我从服务器端应用程序获得valgrind泄漏报告,该应用程序使用与boost 1.56一起分发的boostlog.valgrind报告是:

== 8021 == 1,159块中的37,088字节肯定会在1,642的损失记录1,613中丢失

== 8021 ==在0x4A05588:memalign(vg_replace_malloc.c:727)

== 8021 == by 0x3FDA61118F:tls_get_addr_tail(在/lib64/ld-2.12.so中)

== 8021 == by 0x3FDA61165F:__ tls_get_addr(在/lib64/ld-2.12.so中)

== 8021 == by 0x3FE6ABBDCB:__ cxa_get_globals(在/usr/lib64/libstdc++.so.6.0.13中)

== 8021 == by 0x730C528:boost :: log :: v2_mt_posix :: aux :: unhandled_exception_count()(在/opt/sesteksdk/lib/libboost_log.so.1.56.0中)

== 8021 == by 0x5D54D1F:sestek :: mrcp :: audio :: recognition :: AsynchronousRecognizer :: Notify(sestek :: voice :: recognition :: IRecognizerNotification const*)(record_ostream.hpp:259)

这种泄漏来自一条简单的线路:
LOGGER(debug)<< _chanProp->GetId() << " got recognition ended notification from recognizer";

我们从一次短暂的测试运行中得到了5个泄漏.

我们使用文本文件后端,同步接收器,自动刷新打开.基本上:

void InitializeFileLog(const std::string & logDir)
    { …
Run Code Online (Sandbox Code Playgroud)

c++ logging boost memory-leaks boost-log

13
推荐指数
1
解决办法
1518
查看次数

提升日志severity_logger init_from_stream

我正在使用boost 1.54.0.您可以在下面找到说明我的问题的最小示例.

我使用boost日志的severity_logger.我想从流中配置我的接收器.(在下面的示例中,我使用了一个字符串流.在我的实际应用程序中,流来自一个文件.)我想使用%Severity%来输出或过滤.

我的问题是:如果我在下面的例子中给出它,%Severity%为空.

%LineID%和%Message%按预期填充.如果我在outcommented行中设置了一个接收器,它会按预期工作.

有任何想法吗?

#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/from_stream.hpp>
#include <boost/log/utility/setup/console.hpp>
#include <boost/log/expressions.hpp>

enum SeverityLevel { trace, fatal };

int main (int argc, char *argv[])
{
    boost::log::add_common_attributes();
    /*
    struct severity_tag;
    boost::log::add_console_log(std::clog,
        boost::log::keywords::format = (
            boost::log::expressions::stream
                << boost::log::expressions::attr< unsigned int >("LineID")
                << ": <" << boost::log::expressions::attr<SeverityLevel, severity_tag >("Severity")
                << "> " << boost::log::expressions::smessage)
    ); */

    std::stringstream s;
    s << "[Sinks.MySink]" << std::endl;
    s << "Destination=Console" << std::endl;
    s << "Format=\"%LineID%: <%Severity%> - %Message%\"" …
Run Code Online (Sandbox Code Playgroud)

c++ logging boost boost-log

11
推荐指数
1
解决办法
3310
查看次数

标签 统计

boost-log ×10

boost ×9

c++ ×9

logging ×6

boost-logging ×1

cmake ×1

format ×1

memory-leaks ×1

timestamp ×1