Merge pull request #196 from gorunovanton/stdout_sink_improvement
Performance improvement of stdout sink
This commit is contained in:
		
						commit
						1d74f1d7c9
					
				| @ -5,10 +5,9 @@ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <spdlog/sinks/ostream_sink.h> | ||||
| #include <spdlog/details/null_mutex.h> | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <cstdio> | ||||
| #include <memory> | ||||
| #include <mutex> | ||||
| 
 | ||||
| @ -18,16 +17,27 @@ namespace sinks | ||||
| { | ||||
| 
 | ||||
| template <class Mutex> | ||||
| class stdout_sink : public ostream_sink<Mutex> | ||||
| class stdout_sink : public base_sink<Mutex> | ||||
| { | ||||
|     using MyType = stdout_sink<Mutex>; | ||||
| public: | ||||
|     stdout_sink() : ostream_sink<Mutex>(std::cout, true) {} | ||||
|     stdout_sink() {} | ||||
|     static std::shared_ptr<MyType> instance() | ||||
|     { | ||||
|         static std::shared_ptr<MyType> instance = std::make_shared<MyType>(); | ||||
|         return instance; | ||||
|     } | ||||
| 
 | ||||
|     void _sink_it(const details::log_msg& msg) override | ||||
|     { | ||||
|         fwrite(msg.formatted.data(), sizeof(char), msg.formatted.size(), stdout); | ||||
|         flush(); | ||||
|     } | ||||
| 
 | ||||
|     void flush() override | ||||
|     { | ||||
|         fflush(stdout); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| typedef stdout_sink<details::null_mutex> stdout_sink_st; | ||||
| @ -35,17 +45,27 @@ typedef stdout_sink<std::mutex> stdout_sink_mt; | ||||
| 
 | ||||
| 
 | ||||
| template <class Mutex> | ||||
| class stderr_sink : public ostream_sink<Mutex> | ||||
| class stderr_sink : public base_sink<Mutex> | ||||
| { | ||||
|     using MyType = stderr_sink<Mutex>; | ||||
| public: | ||||
|     stderr_sink() : ostream_sink<Mutex>(std::cerr, true) {} | ||||
|     stderr_sink() {} | ||||
|     static std::shared_ptr<MyType> instance() | ||||
|     { | ||||
|         static std::shared_ptr<MyType> instance = std::make_shared<MyType>(); | ||||
|         return instance; | ||||
|     } | ||||
|      | ||||
|     void _sink_it(const details::log_msg& msg) override | ||||
|     { | ||||
|         fwrite(msg.formatted.data(), sizeof(char), msg.formatted.size(), stderr); | ||||
|         flush(); | ||||
|     } | ||||
| 
 | ||||
|     void flush() override | ||||
|     { | ||||
|         fflush(stderr); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| typedef stderr_sink<std::mutex> stderr_sink_mt; | ||||
|  | ||||
| @ -12,4 +12,5 @@ | ||||
| 
 | ||||
| #include "../include/spdlog/spdlog.h" | ||||
| #include "../include/spdlog/sinks/null_sink.h" | ||||
| #include "../include/spdlog/sinks/ostream_sink.h" | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user