Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2016, 18:47   #1
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
Вопрос Посоветуйте логгер

Доброго времени суток.
Прошу помощи у вас в поиске логгера. От него требуется выводить в окно консоли сообщения и записывать в файл, но дело в том, что у меня есть куча thread, которые пишут лог, а когда одна нить пишет вся прога тормозит.
boost log конечно вариант, но я ни в какую не могу скомпилить под версию 12.0 библиотеку. Под 14 компилится, а под 12 не хочет.
Может кто подскажет аналоги?
Tahoma вне форума Ответить с цитированием
Старый 04.03.2016, 19:06   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Посмотрите https://github.com/log4cplus/log4cplus
p51x вне форума Ответить с цитированием
Старый 04.03.2016, 19:21   #3
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Посмотрю, спасибо.
Tahoma вне форума Ответить с цитированием
Старый 06.03.2016, 17:25   #4
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Разобрался с boost'ом. Использую VS2013 и ошибка была следующая:
Код:
common_type.hpp(42) : fatal error C1001: An internal error has occurred in the compiler. (compiler file 'msc1.cpp', line 1325) To work around this problem, try simplifying or changing the program near the locations listed above.
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
Оказывается надо было просто update 5 поставить (на форумах говорят, что update 4 тоже исправляет данную проблему).

Сейчас компилируется все отлично, но проблема в том, что в консольное окно выводятся сообщения, а в файл не пишет ничего хотя создает.

.h
Код:
#ifndef _LOGGER_H_
#define _LOGGER_H_

#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 ERR		BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::error)

#define SYS_LOGFILE             "example.log"

//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)

#endif _LOGGER_H_
.cpp:
Код:
#include "logger.h"

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

BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, logger_t)
{
	logger_t lg;

	logging::add_common_attributes();

	logging::add_file_log(
		boost::log::keywords::file_name = SYS_LOGFILE,
		boost::log::keywords::format = (
		expr::stream << expr::format_date_time<     boost::posix_time::ptime >("TimeStamp", "%d-%m-%Y %H:%M:%S")
		<< " [" << expr::attr<     boost::log::trivial::severity_level >("Severity") << "]: "
		<< expr::smessage
		)
		);

	logging::add_console_log(
		std::cout,
		boost::log::keywords::format = (
		expr::stream << expr::format_date_time<     boost::posix_time::ptime >("TimeStamp", "%d-%m-%Y %H:%M:%S")
		<< " [" << expr::attr<     boost::log::trivial::severity_level >("Severity") << "]: "
		<< expr::smessage
		)
		);

	logging::core::get()->set_filter
		(
		logging::trivial::severity >= logging::trivial::info
		);

	return lg;
}
main.cpp:
Код:
INFO << "Program started";
Пробовал форматирование для файла убрать, но все равно ничего не получается.
Tahoma вне форума Ответить с цитированием
Старый 06.03.2016, 22:44   #5
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Переделал логгер, может кому пригодится:

.h:
Код:
#ifndef _LOGGER_H_
#define _LOGGER_H_

#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>

enum severity_level
{
	trace,
	debug,
	info,
	warning,
	error,
	critical
};

template<typename CharT, typename TraitsT>
inline std::basic_ostream<CharT, TraitsT>& operator << (std::basic_ostream<CharT, TraitsT>& strm, severity_level lvl)
{
	static const char* const str[] =
	{
		"trace",
		"debug",
		"info",
		"warning",
		"error",
		"critical"
	};

	if (static_cast<std::size_t>(lvl) < (sizeof(str) / sizeof(*str)))
		strm << str[lvl];
	else
		strm << static_cast<int>(lvl);
	return strm;
}

#define _TRACE	BOOST_LOG_SEV(my_logger::get(), trace)
#define DEBUG	BOOST_LOG_SEV(my_logger::get(), debug)
#define _INFO	BOOST_LOG_SEV(my_logger::get(), info)
#define _WARN	BOOST_LOG_SEV(my_logger::get(), warning)
#define _ERROR	BOOST_LOG_SEV(my_logger::get(), error)
#define _CRIT	BOOST_LOG_SEV(my_logger::get(), critical)

typedef boost::log::sources::severity_logger_mt<severity_level> logger_t;
BOOST_LOG_GLOBAL_LOGGER(my_logger, logger_t)

#endif _LOGGER_H_
.cpp
Код:
#include "logger.h"

#include <boost/utility/empty_deleter.hpp>

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

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

	boost::shared_ptr<logging::core> log_core(logging::core::get());
	
	boost::shared_ptr<sinks::text_ostream_backend> console_backend = boost::make_shared<sinks::text_ostream_backend>();
	console_backend->auto_flush();
	console_backend->add_stream(boost::shared_ptr<std::ostream>(&std::clog, boost::empty_deleter()));

	typedef sinks::synchronous_sink<sinks::text_ostream_backend> text_sink_t;
	boost::shared_ptr<text_sink_t> console_sink = boost::make_shared<text_sink_t>(console_backend);
	console_sink->set_formatter(expr::stream
		<< expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%d.%m.%Y %H:%M:%S")
		<< " [" << expr::attr< severity_level >("Severity") << "]: "
		<< expr::smessage);
	log_core->add_sink(console_sink);

	// rotation file logging
	const std::string filename = "serverlist_%Y%m%d_%H%M%S.log";
	boost::shared_ptr<sinks::text_file_backend> file_backend = boost::make_shared<sinks::text_file_backend>
		(
		keywords::file_name = filename,
		keywords::rotation_size = 5 * 1024 * 1024,
		keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
		keywords::auto_flush = true
		);

	typedef sinks::synchronous_sink<sinks::text_file_backend> file_text_sink_t;
	boost::shared_ptr<file_text_sink_t> file_sink = boost::make_shared<file_text_sink_t>(file_backend);

	file_sink->set_formatter(expr::stream
		<< expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%d.%m.%Y %H:%M:%S")
		<< " [" << expr::attr< severity_level >("Severity") << "]: "
		<< expr::smessage);
	log_core->add_sink(file_sink);

#if _DEBUG
	logging::core::get()->set_filter(expr::attr<severity_level>("Severity") >= trace);
#else
	logging::core::get()->set_filter(expr::attr<severity_level>("Severity") >= info);
#endif

	return lg;
}
В любом месте подгружаем логгер.h
Код:
_WARN << "Program started";

Последний раз редактировалось Tahoma; 06.03.2016 в 23:04.
Tahoma вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[вопрос] Логгер в thread Tahoma Win Api 1 03.03.2016 08:52
Посоветуйте... Bringer Помощь студентам 3 31.07.2013 15:10
Посоветуйте. Z3rique Общие вопросы Delphi 1 06.02.2011 21:12
посоветуйте argentos99 Помощь студентам 2 12.12.2010 12:03
Посоветуйте литературу для начинающего. И вообще что-нибудь толковое посоветуйте ))) Гаур-Мяур SQL, базы данных 5 24.12.2009 00:37