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 | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <spdlog/sinks/ostream_sink.h> |  | ||||||
| #include <spdlog/details/null_mutex.h> | #include <spdlog/details/null_mutex.h> | ||||||
| 
 | 
 | ||||||
| #include <iostream> | #include <cstdio> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <mutex> | #include <mutex> | ||||||
| 
 | 
 | ||||||
| @ -18,16 +17,27 @@ namespace sinks | |||||||
| { | { | ||||||
| 
 | 
 | ||||||
| template <class Mutex> | template <class Mutex> | ||||||
| class stdout_sink : public ostream_sink<Mutex> | class stdout_sink : public base_sink<Mutex> | ||||||
| { | { | ||||||
|     using MyType = stdout_sink<Mutex>; |     using MyType = stdout_sink<Mutex>; | ||||||
| public: | public: | ||||||
|     stdout_sink() : ostream_sink<Mutex>(std::cout, true) {} |     stdout_sink() {} | ||||||
|     static std::shared_ptr<MyType> instance() |     static std::shared_ptr<MyType> instance() | ||||||
|     { |     { | ||||||
|         static std::shared_ptr<MyType> instance = std::make_shared<MyType>(); |         static std::shared_ptr<MyType> instance = std::make_shared<MyType>(); | ||||||
|         return instance; |         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; | typedef stdout_sink<details::null_mutex> stdout_sink_st; | ||||||
| @ -35,17 +45,27 @@ typedef stdout_sink<std::mutex> stdout_sink_mt; | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| template <class Mutex> | template <class Mutex> | ||||||
| class stderr_sink : public ostream_sink<Mutex> | class stderr_sink : public base_sink<Mutex> | ||||||
| { | { | ||||||
|     using MyType = stderr_sink<Mutex>; |     using MyType = stderr_sink<Mutex>; | ||||||
| public: | public: | ||||||
|     stderr_sink() : ostream_sink<Mutex>(std::cerr, true) {} |     stderr_sink() {} | ||||||
|     static std::shared_ptr<MyType> instance() |     static std::shared_ptr<MyType> instance() | ||||||
|     { |     { | ||||||
|         static std::shared_ptr<MyType> instance = std::make_shared<MyType>(); |         static std::shared_ptr<MyType> instance = std::make_shared<MyType>(); | ||||||
|         return instance; |         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; | typedef stderr_sink<std::mutex> stderr_sink_mt; | ||||||
|  | |||||||
| @ -12,4 +12,5 @@ | |||||||
| 
 | 
 | ||||||
| #include "../include/spdlog/spdlog.h" | #include "../include/spdlog/spdlog.h" | ||||||
| #include "../include/spdlog/sinks/null_sink.h" | #include "../include/spdlog/sinks/null_sink.h" | ||||||
|  | #include "../include/spdlog/sinks/ostream_sink.h" | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user