mirror of
https://github.com/gabime/spdlog.git
synced 2025-01-12 17:00:25 +08:00
format
This commit is contained in:
parent
80f19d7136
commit
0d7a1d1ef9
@ -25,7 +25,7 @@ int main(int argc, char *argv[])
|
|||||||
thread_count = std::atoi(argv[1]);
|
thread_count = std::atoi(argv[1]);
|
||||||
|
|
||||||
int howmany = 1000000;
|
int howmany = 1000000;
|
||||||
spdlog::init_thread_pool (howmany, 1);
|
spdlog::init_thread_pool(howmany, 1);
|
||||||
|
|
||||||
auto logger = spdlog::create_async_logger<spdlog::sinks::simple_file_sink_mt>("file_logger", "logs/spdlog-bench-async.log", false);
|
auto logger = spdlog::create_async_logger<spdlog::sinks::simple_file_sink_mt>("file_logger", "logs/spdlog-bench-async.log", false);
|
||||||
logger->set_pattern("[%Y-%m-%d %T.%F]: %L %t %v");
|
logger->set_pattern("[%Y-%m-%d %T.%F]: %L %t %v");
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
#include <thread>
|
#include <thread>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "spdlog/spdlog.h"
|
|
||||||
#include "spdlog/sinks/simple_file_sink.h"
|
#include "spdlog/sinks/simple_file_sink.h"
|
||||||
|
#include "spdlog/spdlog.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "spdlog/spdlog.h"
|
|
||||||
#include "spdlog/sinks/simple_file_sink.h"
|
#include "spdlog/sinks/simple_file_sink.h"
|
||||||
|
#include "spdlog/spdlog.h"
|
||||||
|
|
||||||
int main(int, char *[])
|
int main(int, char *[])
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@ int main(int, char *[])
|
|||||||
|
|
||||||
// Asynchronous logging is very fast..
|
// Asynchronous logging is very fast..
|
||||||
// Just call spdlog::set_async_mode(q_size) and all created loggers from now on will be asynchronous..
|
// Just call spdlog::set_async_mode(q_size) and all created loggers from now on will be asynchronous..
|
||||||
//async_example();
|
// async_example();
|
||||||
|
|
||||||
// Log user-defined types example
|
// Log user-defined types example
|
||||||
user_defined_example();
|
user_defined_example();
|
||||||
@ -107,7 +107,7 @@ int main(int, char *[])
|
|||||||
#include "spdlog/async.h"
|
#include "spdlog/async.h"
|
||||||
void async_example()
|
void async_example()
|
||||||
{
|
{
|
||||||
//auto async_file = spd::basic_logger_mt<spdlog::create_async>("async_file_logger", "logs/async_log.txt");
|
// auto async_file = spd::basic_logger_mt<spdlog::create_async>("async_file_logger", "logs/async_log.txt");
|
||||||
|
|
||||||
for (int j = 0; j < 1; j++)
|
for (int j = 0; j < 1; j++)
|
||||||
{
|
{
|
||||||
@ -119,8 +119,7 @@ void async_example()
|
|||||||
}
|
}
|
||||||
spdlog::drop_all();
|
spdlog::drop_all();
|
||||||
}
|
}
|
||||||
//std::this_thread::sleep_for(std::chrono::seconds(1));
|
// std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||||
|
|
||||||
|
|
||||||
// you can also modify thread pool settings *before* creating the logger:
|
// you can also modify thread pool settings *before* creating the logger:
|
||||||
// spdlog::init_thread_pool(32768, 4); // queue with max 32k items 4 backing threads.
|
// spdlog::init_thread_pool(32768, 4); // queue with max 32k items 4 backing threads.
|
||||||
|
@ -179,7 +179,13 @@ using filename_t = std::wstring;
|
|||||||
using filename_t = std::string;
|
using filename_t = std::string;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define SPDLOG_CATCH_AND_HANDLE \
|
||||||
#define SPDLOG_CATCH_AND_HANDLE catch (const std::exception &ex) {_err_handler(ex.what());}\
|
catch (const std::exception &ex) \
|
||||||
catch (...) {_err_handler("Unknown exeption in logger");}
|
{ \
|
||||||
|
_err_handler(ex.what()); \
|
||||||
|
} \
|
||||||
|
catch (...) \
|
||||||
|
{ \
|
||||||
|
_err_handler("Unknown exeption in logger"); \
|
||||||
|
}
|
||||||
} // namespace spdlog
|
} // namespace spdlog
|
||||||
|
@ -10,21 +10,21 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace spdlog {
|
namespace spdlog {
|
||||||
namespace details {
|
namespace details {
|
||||||
|
|
||||||
using async_logger_ptr = std::shared_ptr<spdlog::async_logger>;
|
using async_logger_ptr = std::shared_ptr<spdlog::async_logger>;
|
||||||
|
|
||||||
enum class async_msg_type
|
enum class async_msg_type
|
||||||
{
|
{
|
||||||
log,
|
log,
|
||||||
flush,
|
flush,
|
||||||
terminate
|
terminate
|
||||||
};
|
};
|
||||||
|
|
||||||
// Async msg to move to/from the queue
|
// Async msg to move to/from the queue
|
||||||
// Movable only. should never be copied
|
// Movable only. should never be copied
|
||||||
struct async_msg
|
struct async_msg
|
||||||
{
|
{
|
||||||
async_msg_type msg_type;
|
async_msg_type msg_type;
|
||||||
level::level_enum level;
|
level::level_enum level;
|
||||||
log_clock::time_point time;
|
log_clock::time_point time;
|
||||||
@ -78,11 +78,11 @@ namespace spdlog {
|
|||||||
msg.color_range_start = 0;
|
msg.color_range_start = 0;
|
||||||
msg.color_range_end = 0;
|
msg.color_range_end = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class thread_pool
|
class thread_pool
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using item_type = async_msg;
|
using item_type = async_msg;
|
||||||
using q_type = details::mpmc_blocking_queue<item_type>;
|
using q_type = details::mpmc_blocking_queue<item_type>;
|
||||||
using clock_type = std::chrono::steady_clock;
|
using clock_type = std::chrono::steady_clock;
|
||||||
@ -139,7 +139,7 @@ namespace spdlog {
|
|||||||
return msg_counter_.load(std::memory_order_relaxed);
|
return msg_counter_.load(std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::atomic<size_t> msg_counter_; // total # of messages processed in this pool
|
std::atomic<size_t> msg_counter_; // total # of messages processed in this pool
|
||||||
q_type _q;
|
q_type _q;
|
||||||
|
|
||||||
@ -159,9 +159,7 @@ namespace spdlog {
|
|||||||
|
|
||||||
void worker_loop()
|
void worker_loop()
|
||||||
{
|
{
|
||||||
while (process_next_msg())
|
while (process_next_msg()) {};
|
||||||
{
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// process next message in the queue
|
// process next message in the queue
|
||||||
@ -200,7 +198,7 @@ namespace spdlog {
|
|||||||
assert(false);
|
assert(false);
|
||||||
return true; // should not be reached
|
return true; // should not be reached
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace details
|
} // namespace details
|
||||||
} // namespace spdlog
|
} // namespace spdlog
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
#include "test_sink.h"
|
|
||||||
#include "spdlog/async.h"
|
#include "spdlog/async.h"
|
||||||
#include "spdlog/sinks/simple_file_sink.h"
|
#include "spdlog/sinks/simple_file_sink.h"
|
||||||
|
#include "test_sink.h"
|
||||||
|
|
||||||
//std::unique_ptr<spdlog::async_logger> create_logger(size_t tp_queue_size, size_t tp_threads)
|
// std::unique_ptr<spdlog::async_logger> create_logger(size_t tp_queue_size, size_t tp_threads)
|
||||||
//{
|
//{
|
||||||
// auto tp = std::make_shared<details::thread_pool>(8192, 1);
|
// auto tp = std::make_shared<details::thread_pool>(8192, 1);
|
||||||
// auto logger = std::make_shared<async_logger>("as", test_sink, tp, async_overflow_policy::block_retry);
|
// auto logger = std::make_shared<async_logger>("as", test_sink, tp, async_overflow_policy::block_retry);
|
||||||
@ -87,7 +87,6 @@ TEST_CASE("multi threads", "[async]")
|
|||||||
{
|
{
|
||||||
logger->info("Hello message #{}", j);
|
logger->info("Hello message #{}", j);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +95,6 @@ TEST_CASE("multi threads", "[async]")
|
|||||||
t.join();
|
t.join();
|
||||||
}
|
}
|
||||||
logger->flush();
|
logger->flush();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
REQUIRE(test_sink->msg_counter() == messages * n_threads);
|
REQUIRE(test_sink->msg_counter() == messages * n_threads);
|
||||||
@ -110,7 +108,7 @@ TEST_CASE("to_file", "[async]")
|
|||||||
size_t messages = 512;
|
size_t messages = 512;
|
||||||
size_t n_threads = 4;
|
size_t n_threads = 4;
|
||||||
spdlog::init_thread_pool(queue_size, n_threads);
|
spdlog::init_thread_pool(queue_size, n_threads);
|
||||||
auto logger= spdlog::basic_logger_mt<spdlog::create_async>("as", "logs/async_test.log", true);
|
auto logger = spdlog::basic_logger_mt<spdlog::create_async>("as", "logs/async_test.log", true);
|
||||||
|
|
||||||
std::vector<std::thread> threads;
|
std::vector<std::thread> threads;
|
||||||
for (size_t i = 0; i < n_threads; i++)
|
for (size_t i = 0; i < n_threads; i++)
|
||||||
|
Loading…
Reference in New Issue
Block a user