Added "clone()" support to loggers
This commit is contained in:
		
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							@@ -161,6 +161,18 @@ void daily_example()
 | 
			
		||||
---
 | 
			
		||||
#### Periodic flush
 | 
			
		||||
```c++
 | 
			
		||||
// clone a logger and give it new name.
 | 
			
		||||
// Useful for creating subsystem loggers from some "root" logger
 | 
			
		||||
void clone_example()
 | 
			
		||||
{
 | 
			
		||||
    auto network_logger = spdlog::get("console")->clone("network");
 | 
			
		||||
    network_logger->info("Logging network stuff..");
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
#### Cloning loggers for
 | 
			
		||||
```c++
 | 
			
		||||
// periodically flush all *registered* loggers every 3 seconds:
 | 
			
		||||
// warning: only use if all your loggers are thread safe!
 | 
			
		||||
spdlog::flush_every(std::chrono::seconds(3));
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ int main(int, char *[])
 | 
			
		||||
        // release any threads created by spdlog, and drop all loggers in the registry.
 | 
			
		||||
        spdlog::shutdown();
 | 
			
		||||
    }
 | 
			
		||||
        // Exceptions will only be thrown upon failed logger or sink construction (not during logging)
 | 
			
		||||
    // Exceptions will only be thrown upon failed logger or sink construction (not during logging)
 | 
			
		||||
    catch (const spdlog::spdlog_ex &ex)
 | 
			
		||||
    {
 | 
			
		||||
        std::cout << "Log init failed: " << ex.what() << std::endl;
 | 
			
		||||
 
 | 
			
		||||
@@ -99,13 +99,9 @@ inline void spdlog::async_logger::backend_flush_()
 | 
			
		||||
    SPDLOG_CATCH_AND_HANDLE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline std::shared_ptr<spdlog::logger> spdlog::async_logger::clone(std::string new_name)
 | 
			
		||||
{
 | 
			
		||||
    auto cloned = std::make_shared<spdlog::async_logger>(std::move(new_name),
 | 
			
		||||
                                                         sinks_.begin(), sinks_.end(),
 | 
			
		||||
                                                         thread_pool_,
 | 
			
		||||
                                                         overflow_policy_);
 | 
			
		||||
    auto cloned = std::make_shared<spdlog::async_logger>(std::move(new_name), sinks_.begin(), sinks_.end(), thread_pool_, overflow_policy_);
 | 
			
		||||
 | 
			
		||||
    cloned->set_level(this->level());
 | 
			
		||||
    cloned->flush_on(this->flush_level());
 | 
			
		||||
 
 | 
			
		||||
@@ -22,8 +22,8 @@ inline void append_str(const std::string &str, fmt::basic_memory_buffer<char, Bu
 | 
			
		||||
template<size_t Buffer_Size>
 | 
			
		||||
inline void append_c_str(const char *c_str, fmt::basic_memory_buffer<char, Buffer_Size> &dest)
 | 
			
		||||
{
 | 
			
		||||
	auto len = std::char_traits<char>::length(c_str);
 | 
			
		||||
	dest.append(c_str, c_str + len);   
 | 
			
		||||
    auto len = std::char_traits<char>::length(c_str);
 | 
			
		||||
    dest.append(c_str, c_str + len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<size_t Buffer_Size1, size_t Buffer_Size2>
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,6 @@
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// create logger with given name, sinks and the default pattern formatter
 | 
			
		||||
// all other ctors will call this one
 | 
			
		||||
template<typename It>
 | 
			
		||||
@@ -80,7 +79,7 @@ inline void spdlog::logger::log(level::level_enum lvl, const char *msg)
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
        details::log_msg log_msg(&name_, lvl);
 | 
			
		||||
		details::fmt_helper::append_c_str(msg, log_msg.raw);
 | 
			
		||||
        details::fmt_helper::append_c_str(msg, log_msg.raw);
 | 
			
		||||
        sink_it_(log_msg);
 | 
			
		||||
    }
 | 
			
		||||
    SPDLOG_CATCH_AND_HANDLE
 | 
			
		||||
@@ -276,7 +275,6 @@ inline spdlog::level::level_enum spdlog::logger::flush_level() const
 | 
			
		||||
    return static_cast<spdlog::level::level_enum>(flush_level_.load(std::memory_order_relaxed));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool spdlog::logger::should_flush_(const details::log_msg &msg)
 | 
			
		||||
{
 | 
			
		||||
    auto flush_level = flush_level_.load(std::memory_order_relaxed);
 | 
			
		||||
 
 | 
			
		||||
@@ -115,7 +115,6 @@ public:
 | 
			
		||||
    level::level_enum level() const;
 | 
			
		||||
    const std::string &name() const;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // set formatting for the sinks in this logger.
 | 
			
		||||
    // each sink will get a seperate instance of the formatter object.
 | 
			
		||||
    void set_formatter(std::unique_ptr<formatter> formatter);
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
#include <exception>
 | 
			
		||||
#include <fstream>
 | 
			
		||||
#include <ostream>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <ostream>
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
#define SPDLOG_TRACE_ON
 | 
			
		||||
 
 | 
			
		||||
@@ -2,12 +2,11 @@
 | 
			
		||||
 | 
			
		||||
using namespace std::chrono;
 | 
			
		||||
using std::chrono::milliseconds;
 | 
			
		||||
using test_clock = std::chrono::high_resolution_clock ;
 | 
			
		||||
 | 
			
		||||
using test_clock = std::chrono::high_resolution_clock;
 | 
			
		||||
 | 
			
		||||
static milliseconds millis_from(const test_clock::time_point &tp0)
 | 
			
		||||
{
 | 
			
		||||
    return std::chrono::duration_cast<milliseconds>(test_clock::now()-tp0);
 | 
			
		||||
    return std::chrono::duration_cast<milliseconds>(test_clock::now() - tp0);
 | 
			
		||||
}
 | 
			
		||||
TEST_CASE("dequeue-empty-nowait", "[mpmc_blocking_q]")
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user