Библиотека событий C ++ - PullRequest
       4

Библиотека событий C ++

3 голосов
/ 29 августа 2010

Можете ли вы порекомендовать легкую кроссплатформенную библиотеку записи / записи событий со следующими функциями:

  • простой интерфейс
  • Инкрементная запись события (то есть событие ++)
  • быстрое обновление
  • настраиваемый отчет о выходе (например, iostream)
  • отметки времени или интеграция с ОС не важны

в принципе несложно создать себя, используя карту со значением строки / целочисленного ключа, но я бы предпочел использовать уже написанное. Я посмотрел на log4cxx, но это кажется излишним.

Спасибо

Ответы [ 4 ]

0 голосов
/ 23 сентября 2010

Что вам нужно, так это библиотека логирования буста, ее простая, быстрая, настраиваемая.

Я не уверен в опции event ++, но реализовать ее будет не очень сложно.В нем есть все, что вам нужно, и многое другое, проверьте его http://torjo.com/log2/doc/html/main_intro.html#main_motivation

0 голосов
/ 18 сентября 2010
  • http://pantheios.sourceforge.net/: Pantheios - это библиотека API диагностики C / C ++ с открытым исходным кодом, предлагающая оптимальное сочетание 100% безопасности типов, эффективности, универсальности и расширяемости.Он прост в использовании и расширении, обладает высокой переносимостью (не зависит от платформы и компилятора) и, что лучше всего, поддерживает традицию C, согласно которой вы платите только за то, что используете.

  • http://www.arg0.net/rlog: RLog - это гибкое средство регистрации сообщений для программ и библиотек C ++.Он высоко оптимизирован для случая, когда сообщения журнала не выводятся, поэтому его можно оставить в рабочем коде и включить по требованию

0 голосов
/ 19 сентября 2010

это прототип, окончательная версия: http://code.google.com/p/asadchev/source/browse/trunk/projects/boost/utility/profiler.hpp

#define UTILITY_EVENT_HPP

#include "utility/timer.hpp"

#include <string>
#include <map>
#include <boost/thread.hpp>
#include <boost/tuple/tuple.hpp>

#define PROFILE_FUNCTION(...)                                   \
    utility::profiler::event                                    \
    event__(utility::profiler::global[                          \
        utility::detail::profiler_event(__PRETTY_FUNCTION__)(__VA_ARGS__)])



namespace utility {

    namespace detail {
        struct profiler_event {
            profiler_event(const std::string &key) : data_(key) {}
            operator const std::string&() const { return data_; }
            profiler_event& operator()(const std::string &key) {
                data_ += (":" + key);
                return *this;
            }
            profiler_event& operator()() { return *this; }
        private:
            std::string data_;
        };
    }


    struct profiler {

        typedef std::string event_key;

        struct event_data {
            event_data(): size_(0), value_(0) {}
            event_data(const event_data &e)
                : size_(e.size_), value_(e.value_) {}
            event_data& operator+=(double t) {
                boost::lock_guard<boost::mutex> lock(mutex_);
                 ++size_;
                 value_ += t;
                return *this;
            }
            event_data& operator++() { return (*this += 1); }
            std::ostream& to_stream(std::ostream &ostream) const {
                boost::lock_guard<boost::mutex> lock(mutex_);
                ostream << value_ << "/" << size_;
                return ostream;
            }
        private:
            typedef boost::tuple<profiler&, const event_key&> constructor;
            size_t size_;
            double value_;
            mutable boost::mutex mutex_;
        };

        struct event {
            event(event_data &data) : data_(data) {}
            ~event() {
                // std::cout << timer_ << std::endl;
                data_ += double(timer_);
            }
            event_data &data_;
            utility::timer timer_;
        };

        event_data& operator[](const event_key &key) {
            boost::lock_guard<boost::mutex> lock(mutex_);
            return events_[key];
        }
        std::ostream& to_stream(std::ostream &ostream) const {
            boost::lock_guard<boost::mutex> lock(mutex_);
            std::map<event_key, event_data>::const_iterator it = events_.begin();
            while (it != events_.end()) {
                ostream << it->first << ": ";
                it->second.to_stream(ostream);
                ostream << std::endl;
                ++it;
            }
            return ostream;
        }
        static profiler global;
    private:
        std::map<event_key, event_data> events_;
        mutable boost::mutex mutex_;
    };

    inline std::ostream& operator<<(std::ostream &ostream, const profiler &p) {
        return p.to_stream(ostream);
    }

}


#endif // UTILITY_EVENT_HPP
0 голосов
/ 15 сентября 2010

Старый добрый syslog (или syslog-ng) кажется хорошим началом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...