$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: [boost] [log] init_from_settings - problem with applying format and filter
From: Petrovskiy Yuriy (yuriy.petrovskiy_at_[hidden])
Date: 2011-07-04 07:47:20
I am trying to use boost::log for tracking application activity. I need
message with severity level output to console and more detailed output to
file.
I have the following code (most of it is copied from boost::log
documentation):
/* boostLogTest.cpp */
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/utility/init/from_settings.hpp>
using namespace boost::log;
enum logMessageSeverityLevels
{
trace = 0 ,
debug = 1,
info = 2,
warning = 3,
error = 4,
fatal = 5
};
#define LOG(x) BOOST_LOG_SEV(logger, x )
typedef boost::log::sources::severity_logger< logMessageSeverityLevels >
loggerType;
loggerType logger(keywords::severity = error);
int main() {
boost::log::settings setts;
//setts["Core"]["Filter"] = "%Severity% >= 0"; //if set - no output anywhere
setts["Core"]["DisableLogging"] = false;
setts["Sink:Console"]["Destination"] = "Console";
setts["Sink:Console"]["Filter"] = "%Severity% >= 3"; // no output to console
in result
setts["Sink:Console"]["Format"] = "[%Severity%] %_%";
setts["Sink:Console"]["AutoFlush"] = true;
setts["Sink:File"]["Destination"] = "TextFile";
setts["Sink:File"]["FileName"] = "test_%3N.log";
setts["Sink:File"]["Format"] = "[%TimeStamp%] <%Severity%> %_%";
setts["Sink:File"]["AutoFlush"] = true;
boost::log::init_from_settings(setts);
LOG(info) << "!!!Hello World!!!";
LOG(warning) << "NO TimeStamp and Severity";
LOG(error) << "NO output if Filter is set ";
return 0;
}
result:
no output to console
file (test_000.log) is being rewritten on each run:
[] ** !!!Hello World!!!
[] ** NO date
[] ** NO severity
[] ** NO output if Filter is set
if I add
#include <boost/log/trivial.hpp>
and replace LOG definition with
#define LOG(x) BOOST_LOG_TRIVIAL( x )
I get also no console output but TWO! logs:
(boostLogTest.log)
1 [2011-Jul-04 12:14:06.331749] [0x73d190] [info] !!!Hello World!!!
2 [2011-Jul-04 12:14:06.338750] [0x73d190] [warning] NO TimeStamp and
Severity
3 [2011-Jul-04 12:14:06.339750] [0x73d190] [error] NO output if Filter is
set
....
( test_000.log )
[2011-Jul-04 12:14:06.331749] ** !!!Hello World!!!
[2011-Jul-04 12:14:06.338750] ** NO TimeStamp and Severity
[2011-Jul-04 12:14:06.339750] ** NO output if Filter is set
Built with:
g++ -Ipath\to\boost -O0 -g3 -Wall -c -fmessage-length=0
-osrc\boostLogTest.o ..\src\boostLogTest.cpp
g++ -Lpath\to\boost\libs -oboostLogTest.exe src\boostLogTest.o
-lboost_log-mgw45-mt-d-1_46_1 -lboost_log_setup-mgw45-mt-d-1_46_1
Environment: Windows 7 x64 / MinGW (gcc 4.5) / Eclipse
Boost version 1.46.1
Boost log from
https://boost-log.svn.sourceforge.net/svnroot/boost-log/trunk/boost-logRevision
603
Boost built with the same toolset.
The questions are:
- How to configure severity_logger using init_from_settings() to get the
custom severity levels in the log?
- Why "Format" variables do not work? (and why %TimeStamp% starts to work
if using BOOST_LOG_TRIVIAL for output)?
- What should be done to make logger append to log (not overwrite)?
- Is it possible to log file and line using format variables (only to file)?
I had explored boost::log documentation but had not found answers for these
questions.
Thank you in advance.
Yuriy Petrovskiy