This commit is contained in:
gabime 2014-11-05 23:24:26 +02:00
commit 017088d01c
21 changed files with 47 additions and 44 deletions

View File

@ -11,6 +11,7 @@ Just copy the files to your build tree and use a C++11 compiler
* gcc 4.8.1 and above * gcc 4.8.1 and above
* clang 3.5 * clang 3.5
* visual studio 2013 * visual studio 2013
* mingw with g++ 4.9.x
##Features ##Features
* Very fast - performance is the primary goal (see becnhmarks below) * Very fast - performance is the primary goal (see becnhmarks below)

32
example/Makefile.mingw Normal file
View File

@ -0,0 +1,32 @@
CXX = g++
CXXFLAGS = -D_WIN32_WINNT=0x600 -march=native -Wall -Wextra -Wshadow -pedantic -std=c++11 -pthread -Wl,--no-as-needed -I../include
CXX_RELEASE_FLAGS = -O3
CXX_DEBUG_FLAGS= -g
all: example bench
debug: example-debug bench-debug
example: example.cpp
$(CXX) example.cpp -o example $(CXXFLAGS) $(CXX_RELEASE_FLAGS)
bench: bench.cpp
$(CXX) bench.cpp -o bench $(CXXFLAGS) $(CXX_RELEASE_FLAGS)
example-debug: example.cpp
$(CXX) example.cpp -o example-debug $(CXXFLAGS) $(CXX_DEBUG_FLAGS)
bench-debug: bench.cpp
$(CXX) bench.cpp -o bench-debug $(CXXFLAGS) $(CXX_DEBUG_FLAGS)
clean:
rm -f *.o logs/*.txt example example-debug bench bench-debug
rebuild: clean all
rebuild-debug: clean debug

View File

@ -105,14 +105,13 @@ void bench(int howmany, std::shared_ptr<spdlog::logger> log)
auto start = system_clock::now(); auto start = system_clock::now();
for (auto i = 0; i < howmany; ++i) for (auto i = 0; i < howmany; ++i)
{ {
log->info("Hello logger: msg number ") << i << "**************************" << i + 1 << "," << 1 + 2;; log->info("Hello logger: msg number ", i);
} }
auto delta = system_clock::now() - start; auto delta = system_clock::now() - start;
auto delta_d = duration_cast<duration<double>> (delta).count(); auto delta_d = duration_cast<duration<double>> (delta).count();
cout << format(int(howmany / delta_d)) << "/sec" << endl; cout << format(int(howmany / delta_d)) << "/sec" << endl;
log->close();
} }
@ -146,6 +145,5 @@ void bench_mt(int howmany, std::shared_ptr<spdlog::logger> log, int thread_count
auto delta = system_clock::now() - start; auto delta = system_clock::now() - start;
auto delta_d = duration_cast<duration<double>> (delta).count(); auto delta_d = duration_cast<duration<double>> (delta).count();
cout << format(int(howmany / delta_d)) << "/sec" << endl; cout << format(int(howmany / delta_d)) << "/sec" << endl;
log->close();
} }

View File

@ -29,7 +29,7 @@
#include "spdlog/spdlog.h" #include "spdlog/spdlog.h"
int main(int, char* []) int maina(int, char* [])
{ {
namespace spd = spdlog; namespace spd = spdlog;

View File

@ -137,11 +137,9 @@ inline bool spdlog::logger::should_log(spdlog::level::level_enum msg_level) cons
return msg_level >= _level.load(); return msg_level >= _level.load();
} }
inline void spdlog::logger::close() inline void spdlog::logger::stop()
{ {
set_level(level::OFF); set_level(level::OFF);
for (auto &sink : _sinks)
sink->close();
} }

View File

@ -104,12 +104,12 @@ public:
} }
void close_all() void stop_all()
{ {
std::lock_guard<std::mutex> lock(_mutex); std::lock_guard<std::mutex> lock(_mutex);
_level = level::OFF; _level = level::OFF;
for (auto& l : _loggers) for (auto& l : _loggers)
l.second->close(); l.second->stop();
} }

View File

@ -116,7 +116,7 @@ inline void spdlog::set_level(level::level_enum log_level)
return details::registry::instance().set_level(log_level); return details::registry::instance().set_level(log_level);
} }
inline void spdlog::close() inline void spdlog::stop()
{ {
return details::registry::instance().close_all(); return details::registry::instance().stop_all();
} }

View File

@ -67,7 +67,8 @@ public:
const std::string& name() const; const std::string& name() const;
bool should_log(level::level_enum) const; bool should_log(level::level_enum) const;
void close(); //Stop logging
void stop();
template <typename... Args> details::line_logger log(level::level_enum lvl, const Args&... args); template <typename... Args> details::line_logger log(level::level_enum lvl, const Args&... args);
template <typename... Args> details::line_logger log(const Args&... args); template <typename... Args> details::line_logger log(const Args&... args);

View File

@ -57,8 +57,6 @@ public:
//Wait to remaining items (if any) in the queue to be written and shutdown //Wait to remaining items (if any) in the queue to be written and shutdown
void shutdown(const std::chrono::milliseconds& timeout); void shutdown(const std::chrono::milliseconds& timeout);
void close() override;
protected: protected:
@ -144,16 +142,12 @@ inline void spdlog::sinks::async_sink::shutdown(const std::chrono::milliseconds&
auto until = log_clock::now() + timeout; auto until = log_clock::now() + timeout;
while (_q.size() > 0 && log_clock::now() < until) while (_q.size() > 0 && log_clock::now() < until)
{ {
std::this_thread::sleep_for(std::chrono::milliseconds(2)); std::this_thread::sleep_for(std::chrono::milliseconds(5));
} }
} }
_shutdown(); _shutdown();
} }
inline void spdlog::sinks::async_sink::close()
{
_shutdown();
}
inline void spdlog::sinks::async_sink::_shutdown() inline void spdlog::sinks::async_sink::_shutdown()
@ -166,7 +160,5 @@ inline void spdlog::sinks::async_sink::_shutdown()
_back_thread.join(); _back_thread.join();
} }
for (auto &s : _sinks)
s->close();
} }

View File

@ -50,10 +50,7 @@ public:
{ {
_file_helper.open(filename); _file_helper.open(filename);
} }
void close() override
{
_file_helper.close();
}
protected: protected:
void _sink_it(const details::log_msg& msg) override void _sink_it(const details::log_msg& msg) override
{ {
@ -86,10 +83,6 @@ public:
_file_helper.open(calc_filename(_base_filename, 0, _extension)); _file_helper.open(calc_filename(_base_filename, 0, _extension));
} }
void close() override
{
_file_helper.close();
}
protected: protected:
void _sink_it(const details::log_msg& msg) override void _sink_it(const details::log_msg& msg) override
@ -171,10 +164,6 @@ public:
_file_helper.open(calc_filename(_base_filename, _extension)); _file_helper.open(calc_filename(_base_filename, _extension));
} }
void close() override
{
_file_helper.close();
}
protected: protected:
void _sink_it(const details::log_msg& msg) override void _sink_it(const details::log_msg& msg) override

View File

@ -34,16 +34,13 @@ namespace sinks
{ {
template <class Mutex> template <class Mutex>
class null_sink : public base_sink<Mutex> class null_sink : public base_sink < Mutex >
{ {
protected: protected:
void _sink_it(const details::log_msg&) override void _sink_it(const details::log_msg&) override
{} {}
void close() override
{}
}; };
typedef null_sink<details::null_mutex> null_sink_st; typedef null_sink<details::null_mutex> null_sink_st;
typedef null_sink<std::mutex> null_sink_mt; typedef null_sink<std::mutex> null_sink_mt;

View File

@ -44,10 +44,6 @@ public:
ostream_sink& operator=(const ostream_sink&) = delete; ostream_sink& operator=(const ostream_sink&) = delete;
virtual ~ostream_sink() = default; virtual ~ostream_sink() = default;
void close() override
{}
protected: protected:
virtual void _sink_it(const details::log_msg& msg) override virtual void _sink_it(const details::log_msg& msg) override
{ {

View File

@ -35,7 +35,6 @@ class sink
public: public:
virtual ~sink() {} virtual ~sink() {}
virtual void log(const details::log_msg& msg) = 0; virtual void log(const details::log_msg& msg) = 0;
virtual void close() = 0;
}; };
} }
} }

View File

@ -88,8 +88,8 @@ std::shared_ptr<spdlog::logger> create(const std::string& logger_name, const Arg
// Set global formatter object // Set global formatter object
void set_formatter(formatter_ptr f); void set_formatter(formatter_ptr f);
// Close all loggers and stop logging // Stop logging by setting all the loggers to log level OFF
void close(); void stop();
// //