Файл журнала не создается

Мне нужен глобальный логгер, который я могу использовать для нескольких классов в моем проекте. Я хочу, чтобы настройки логгера были в INI-файле.

Я начинаю следовать примеру Вот и совместил это с некоторыми предложениями в моем предыдущем вопросе Вот.

Мой Logger.h выглядит следующим образом.

#pragma once

#include <boost/log/common.hpp>
#include <boost/log/attributes.hpp>
#include <boost/log/utility/setup/from_stream.hpp>
#include <boost/regex.hpp>

#include <boost/log/expressions.hpp>
#include <boost/log/sources/global_logger_storage.hpp>
#include <boost/log/support/date_time.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/utility/setup.hpp>#define INFO  BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::info)
#define WARN  BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::warning)
#define ERROR BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::error)

//Narrow-char thread-safe logger.
typedef boost::log::sources::severity_logger_mt<boost::log::trivial::severity_level> logger_t;

//declares a global logger with a custom initialization
BOOST_LOG_GLOBAL_LOGGER(my_logger, logger_t)
BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(test_lg, boost::log::sources::severity_logger< >)

Logger.cpp выглядит следующим образом.

#include "stdafx.h"#include "Logger.h"#include <fstream>

namespace attrs = boost::log::attributes;
namespace expr = boost::log::expressions;
namespace logging = boost::log;

//Defines a global logger initialization routine
BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, logger_t)
{
logger_t lg;

logging::add_common_attributes();

std::ifstream settings("settings.ini");
if (!settings.is_open())
{
std::cout << "Could not open settings.txt file" << std::endl;
//return 1;
}

// Read the settings and initialize logging library
logging::init_from_stream(settings);

// Add some attributes
logging::core::get()->add_global_attribute("TimeStamp", attrs::local_clock());
logging::register_simple_filter_factory<logging::trivial::severity_level>("Severity");

return lg;
}

Settings.ini выглядит как ниже

#
#          Copyright Andrey Semashev 2007 - 2014.
# Distributed under the Boost Software License, Version 1.0.
#    (See accompanying file LICENSE_1_0.txt or copy at
#          http://www.boost.org/LICENSE_1_0.txt)
#

[Core]
Filter="%Severity% >= debug"
[Sinks.1]
Destination=TextFile
FileName=test.log
AutoFlush=true
Format="[%TimeStamp%] <%Severity%> (%Channel%): %Message%"

Наконец я пытаюсь использовать регистратор, как показано ниже.

#include "Logger.h"int wmain(int argc, wchar_t* argv[])
{
INFO << "Program started";
}

Однако файл журнала не создается. Что я делаю не так сейчас?

-2

Решение

Фабрика фильтров должна быть зарегистрирована до парсинг настроек ini.

// Add some attributes
logging::core::get()->add_global_attribute("TimeStamp", attrs::local_clock());
logging::register_simple_filter_factory<logging::trivial::severity_level>("Severity");

Должен быть перед вызовом

// Read the settings and initialize logging library
logging::init_from_stream(settings);

Без фабрики фильтр не интерпретируется и в итоге фильтрует все.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector