mirror of
https://github.com/gabime/spdlog.git
synced 2024-11-15 16:35:45 +08:00
Added "clone()" support to loggers
This commit is contained in:
parent
91d8869f36
commit
5d7845c138
12
README.md
12
README.md
@ -161,6 +161,18 @@ void daily_example()
|
|||||||
---
|
---
|
||||||
#### Periodic flush
|
#### Periodic flush
|
||||||
```c++
|
```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:
|
// periodically flush all *registered* loggers every 3 seconds:
|
||||||
// warning: only use if all your loggers are thread safe!
|
// warning: only use if all your loggers are thread safe!
|
||||||
spdlog::flush_every(std::chrono::seconds(3));
|
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.
|
// release any threads created by spdlog, and drop all loggers in the registry.
|
||||||
spdlog::shutdown();
|
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)
|
catch (const spdlog::spdlog_ex &ex)
|
||||||
{
|
{
|
||||||
std::cout << "Log init failed: " << ex.what() << std::endl;
|
std::cout << "Log init failed: " << ex.what() << std::endl;
|
||||||
|
@ -99,13 +99,9 @@ inline void spdlog::async_logger::backend_flush_()
|
|||||||
SPDLOG_CATCH_AND_HANDLE
|
SPDLOG_CATCH_AND_HANDLE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline std::shared_ptr<spdlog::logger> spdlog::async_logger::clone(std::string new_name)
|
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),
|
auto cloned = std::make_shared<spdlog::async_logger>(std::move(new_name), sinks_.begin(), sinks_.end(), thread_pool_, overflow_policy_);
|
||||||
sinks_.begin(), sinks_.end(),
|
|
||||||
thread_pool_,
|
|
||||||
overflow_policy_);
|
|
||||||
|
|
||||||
cloned->set_level(this->level());
|
cloned->set_level(this->level());
|
||||||
cloned->flush_on(this->flush_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>
|
template<size_t Buffer_Size>
|
||||||
inline void append_c_str(const char *c_str, fmt::basic_memory_buffer<char, Buffer_Size> &dest)
|
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);
|
auto len = std::char_traits<char>::length(c_str);
|
||||||
dest.append(c_str, c_str + len);
|
dest.append(c_str, c_str + len);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<size_t Buffer_Size1, size_t Buffer_Size2>
|
template<size_t Buffer_Size1, size_t Buffer_Size2>
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
// create logger with given name, sinks and the default pattern formatter
|
// create logger with given name, sinks and the default pattern formatter
|
||||||
// all other ctors will call this one
|
// all other ctors will call this one
|
||||||
template<typename It>
|
template<typename It>
|
||||||
@ -80,7 +79,7 @@ inline void spdlog::logger::log(level::level_enum lvl, const char *msg)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
details::log_msg log_msg(&name_, lvl);
|
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);
|
sink_it_(log_msg);
|
||||||
}
|
}
|
||||||
SPDLOG_CATCH_AND_HANDLE
|
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));
|
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)
|
inline bool spdlog::logger::should_flush_(const details::log_msg &msg)
|
||||||
{
|
{
|
||||||
auto flush_level = flush_level_.load(std::memory_order_relaxed);
|
auto flush_level = flush_level_.load(std::memory_order_relaxed);
|
||||||
|
@ -115,7 +115,6 @@ public:
|
|||||||
level::level_enum level() const;
|
level::level_enum level() const;
|
||||||
const std::string &name() const;
|
const std::string &name() const;
|
||||||
|
|
||||||
|
|
||||||
// set formatting for the sinks in this logger.
|
// set formatting for the sinks in this logger.
|
||||||
// each sink will get a seperate instance of the formatter object.
|
// each sink will get a seperate instance of the formatter object.
|
||||||
void set_formatter(std::unique_ptr<formatter> formatter);
|
void set_formatter(std::unique_ptr<formatter> formatter);
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <ostream>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <ostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#define SPDLOG_TRACE_ON
|
#define SPDLOG_TRACE_ON
|
||||||
|
@ -2,12 +2,11 @@
|
|||||||
|
|
||||||
using namespace std::chrono;
|
using namespace std::chrono;
|
||||||
using std::chrono::milliseconds;
|
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)
|
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]")
|
TEST_CASE("dequeue-empty-nowait", "[mpmc_blocking_q]")
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user