astyle
This commit is contained in:
		@@ -50,110 +50,110 @@ void bench_mt(int howmany, std::shared_ptr<spdlog::logger> log, int thread_count
 | 
			
		||||
int main(int argc, char* argv[])
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    int howmany = 1048576;
 | 
			
		||||
    int threads = 10;
 | 
			
		||||
    bool auto_flush = false;
 | 
			
		||||
    int file_size = 30 * 1024 * 1024;
 | 
			
		||||
    int rotating_files = 5;
 | 
			
		||||
	int howmany = 1048576;
 | 
			
		||||
	int threads = 10;
 | 
			
		||||
	bool auto_flush = false;
 | 
			
		||||
	int file_size = 30 * 1024 * 1024;
 | 
			
		||||
	int rotating_files = 5;
 | 
			
		||||
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
	try
 | 
			
		||||
	{
 | 
			
		||||
 | 
			
		||||
        if(argc > 1)
 | 
			
		||||
            howmany = atoi(argv[1]);
 | 
			
		||||
        if (argc > 2)
 | 
			
		||||
            threads =   atoi(argv[2]);
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
        cout << "*******************************************************************************\n";
 | 
			
		||||
        cout << "Single thread, " << format(howmany)  << " iterations, auto flush=" << auto_flush << endl;
 | 
			
		||||
        cout << "*******************************************************************************\n";
 | 
			
		||||
 | 
			
		||||
        auto rotating_st = spdlog::rotating_logger_st("rotating_st", "logs/rotating_st", file_size, rotating_files, auto_flush);
 | 
			
		||||
        bench(howmany, rotating_st);
 | 
			
		||||
        auto daily_st = spdlog::daily_logger_st("daily_st", "logs/daily_st", auto_flush);
 | 
			
		||||
        bench(howmany, daily_st);
 | 
			
		||||
        bench(howmany, spdlog::create<null_sink_st>("null_st"));
 | 
			
		||||
 | 
			
		||||
        cout << "\n*******************************************************************************\n";
 | 
			
		||||
        cout << threads << " threads sharing same logger, " << format(howmany)  << " iterations, auto_flush=" << auto_flush << endl;
 | 
			
		||||
        cout << "*******************************************************************************\n";
 | 
			
		||||
 | 
			
		||||
        auto rotating_mt = spdlog::rotating_logger_mt("rotating_mt", "logs/rotating_mt", file_size, rotating_files, auto_flush);
 | 
			
		||||
        bench_mt(howmany, rotating_mt, threads);
 | 
			
		||||
		if(argc > 1)
 | 
			
		||||
			howmany = atoi(argv[1]);
 | 
			
		||||
		if (argc > 2)
 | 
			
		||||
			threads =   atoi(argv[2]);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        auto daily_mt = spdlog::daily_logger_mt("daily_mt", "logs/daily_mt", auto_flush);
 | 
			
		||||
        bench_mt(howmany, daily_mt, threads);
 | 
			
		||||
        bench(howmany, spdlog::create<null_sink_st>("null_mt"));
 | 
			
		||||
		
 | 
			
		||||
        cout << "\n*******************************************************************************\n";
 | 
			
		||||
        cout << "async logging.. " << threads << " threads sharing same logger, " << format(howmany) << " iterations, auto_flush=" << auto_flush << endl;
 | 
			
		||||
        cout << "*******************************************************************************\n";
 | 
			
		||||
		cout << "*******************************************************************************\n";
 | 
			
		||||
		cout << "Single thread, " << format(howmany)  << " iterations, auto flush=" << auto_flush << endl;
 | 
			
		||||
		cout << "*******************************************************************************\n";
 | 
			
		||||
 | 
			
		||||
		auto rotating_st = spdlog::rotating_logger_st("rotating_st", "logs/rotating_st", file_size, rotating_files, auto_flush);
 | 
			
		||||
		bench(howmany, rotating_st);
 | 
			
		||||
		auto daily_st = spdlog::daily_logger_st("daily_st", "logs/daily_st", auto_flush);
 | 
			
		||||
		bench(howmany, daily_st);
 | 
			
		||||
		bench(howmany, spdlog::create<null_sink_st>("null_st"));
 | 
			
		||||
 | 
			
		||||
		cout << "\n*******************************************************************************\n";
 | 
			
		||||
		cout << threads << " threads sharing same logger, " << format(howmany)  << " iterations, auto_flush=" << auto_flush << endl;
 | 
			
		||||
		cout << "*******************************************************************************\n";
 | 
			
		||||
 | 
			
		||||
		auto rotating_mt = spdlog::rotating_logger_mt("rotating_mt", "logs/rotating_mt", file_size, rotating_files, auto_flush);
 | 
			
		||||
		bench_mt(howmany, rotating_mt, threads);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        spdlog::set_async_mode(howmany);
 | 
			
		||||
		auto daily_mt = spdlog::daily_logger_mt("daily_mt", "logs/daily_mt", auto_flush);
 | 
			
		||||
		bench_mt(howmany, daily_mt, threads);
 | 
			
		||||
		bench(howmany, spdlog::create<null_sink_st>("null_mt"));
 | 
			
		||||
 | 
			
		||||
        for(int i = 0; i < 3; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            auto as = spdlog::daily_logger_st("as", "logs/daily_async", auto_flush);        
 | 
			
		||||
            bench_mt(howmany, as, threads);
 | 
			
		||||
            spdlog::drop("as");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    catch (std::exception &ex)
 | 
			
		||||
    {
 | 
			
		||||
        std::cerr << "Error: " << ex.what() << std::endl;
 | 
			
		||||
        perror("Last error");
 | 
			
		||||
    }
 | 
			
		||||
    return 0;
 | 
			
		||||
		cout << "\n*******************************************************************************\n";
 | 
			
		||||
		cout << "async logging.. " << threads << " threads sharing same logger, " << format(howmany) << " iterations, auto_flush=" << auto_flush << endl;
 | 
			
		||||
		cout << "*******************************************************************************\n";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		spdlog::set_async_mode(howmany);
 | 
			
		||||
 | 
			
		||||
		for(int i = 0; i < 3; ++i)
 | 
			
		||||
		{
 | 
			
		||||
			auto as = spdlog::daily_logger_st("as", "logs/daily_async", auto_flush);
 | 
			
		||||
			bench_mt(howmany, as, threads);
 | 
			
		||||
			spdlog::drop("as");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	catch (std::exception &ex)
 | 
			
		||||
	{
 | 
			
		||||
		std::cerr << "Error: " << ex.what() << std::endl;
 | 
			
		||||
		perror("Last error");
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void bench(int howmany, std::shared_ptr<spdlog::logger> log)
 | 
			
		||||
{
 | 
			
		||||
    cout << log->name() << "...\t\t" << flush;
 | 
			
		||||
    auto start = system_clock::now();
 | 
			
		||||
    for (auto i = 0; i < howmany; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        log->info("Hello logger: msg number {}", i);
 | 
			
		||||
    }
 | 
			
		||||
	cout << log->name() << "...\t\t" << flush;
 | 
			
		||||
	auto start = system_clock::now();
 | 
			
		||||
	for (auto i = 0; i < howmany; ++i)
 | 
			
		||||
	{
 | 
			
		||||
		log->info("Hello logger: msg number {}", i);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    auto delta = system_clock::now() - start;
 | 
			
		||||
    auto delta_d = duration_cast<duration<double>> (delta).count();
 | 
			
		||||
    cout << format(int(howmany / delta_d)) << "/sec" << endl;
 | 
			
		||||
	auto delta = system_clock::now() - start;
 | 
			
		||||
	auto delta_d = duration_cast<duration<double>> (delta).count();
 | 
			
		||||
	cout << format(int(howmany / delta_d)) << "/sec" << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void bench_mt(int howmany, std::shared_ptr<spdlog::logger> log, int thread_count)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    cout << log->name() << "...\t\t" << flush;
 | 
			
		||||
    std::atomic<int > msg_counter {0};
 | 
			
		||||
    vector<thread> threads;
 | 
			
		||||
    auto start = system_clock::now();
 | 
			
		||||
    for (int t = 0; t < thread_count; ++t)
 | 
			
		||||
    {
 | 
			
		||||
        threads.push_back(std::thread([&]()
 | 
			
		||||
        {
 | 
			
		||||
            for(;;)
 | 
			
		||||
            {
 | 
			
		||||
                int counter = ++msg_counter;
 | 
			
		||||
                if (counter > howmany) break;
 | 
			
		||||
                log->info("Hello logger: msg number {}", counter);
 | 
			
		||||
            }
 | 
			
		||||
        }));
 | 
			
		||||
    }
 | 
			
		||||
	cout << log->name() << "...\t\t" << flush;
 | 
			
		||||
	std::atomic<int > msg_counter {0};
 | 
			
		||||
	vector<thread> threads;
 | 
			
		||||
	auto start = system_clock::now();
 | 
			
		||||
	for (int t = 0; t < thread_count; ++t)
 | 
			
		||||
	{
 | 
			
		||||
		threads.push_back(std::thread([&]()
 | 
			
		||||
		{
 | 
			
		||||
			for(;;)
 | 
			
		||||
			{
 | 
			
		||||
				int counter = ++msg_counter;
 | 
			
		||||
				if (counter > howmany) break;
 | 
			
		||||
				log->info("Hello logger: msg number {}", counter);
 | 
			
		||||
			}
 | 
			
		||||
		}));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    for(auto &t:threads)
 | 
			
		||||
    {
 | 
			
		||||
        t.join();
 | 
			
		||||
    };
 | 
			
		||||
	for(auto &t:threads)
 | 
			
		||||
	{
 | 
			
		||||
		t.join();
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    auto delta = system_clock::now() - start;
 | 
			
		||||
    auto delta_d = duration_cast<duration<double>> (delta).count();
 | 
			
		||||
    cout << format(int(howmany / delta_d)) << "/sec" << endl;
 | 
			
		||||
	auto delta = system_clock::now() - start;
 | 
			
		||||
	auto delta_d = duration_cast<duration<double>> (delta).count();
 | 
			
		||||
	cout << format(int(howmany / delta_d)) << "/sec" << endl;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -30,61 +30,61 @@
 | 
			
		||||
 | 
			
		||||
int main(int, char* [])
 | 
			
		||||
{
 | 
			
		||||
    namespace spd = spdlog;
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
        // Set log level to all loggers to debug and above
 | 
			
		||||
        spd::set_level(spd::level::debug);
 | 
			
		||||
	namespace spd = spdlog;
 | 
			
		||||
	try
 | 
			
		||||
	{
 | 
			
		||||
		// Set log level to all loggers to debug and above
 | 
			
		||||
		spd::set_level(spd::level::debug);
 | 
			
		||||
 | 
			
		||||
        // Create console, multithreaded logger
 | 
			
		||||
        auto console = spd::stdout_logger_mt("console");
 | 
			
		||||
        console->info("Welcome to spdlog!") ;
 | 
			
		||||
        console->info("An info message example {}..", 1);
 | 
			
		||||
        console->info() << "Streams are supported too  " << 1;
 | 
			
		||||
		// Create console, multithreaded logger
 | 
			
		||||
		auto console = spd::stdout_logger_mt("console");
 | 
			
		||||
		console->info("Welcome to spdlog!") ;
 | 
			
		||||
		console->info("An info message example {}..", 1);
 | 
			
		||||
		console->info() << "Streams are supported too  " << 1;
 | 
			
		||||
 | 
			
		||||
        console->info("Easy padding in numbers like {:08d}", 12);
 | 
			
		||||
        console->info("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
 | 
			
		||||
        console->info("Support for floats {:03.2f}", 1.23456);
 | 
			
		||||
        console->info("Positional args are {1} {0}..", "too", "supported");
 | 
			
		||||
		console->info("Easy padding in numbers like {:08d}", 12);
 | 
			
		||||
		console->info("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
 | 
			
		||||
		console->info("Support for floats {:03.2f}", 1.23456);
 | 
			
		||||
		console->info("Positional args are {1} {0}..", "too", "supported");
 | 
			
		||||
 | 
			
		||||
        console->info("{:<30}", "left aligned");
 | 
			
		||||
        console->info("{:>30}", "right aligned");
 | 
			
		||||
        console->info("{:^30}", "centered");
 | 
			
		||||
       
 | 
			
		||||
        // Create a file rotating logger with 5mb size max and 3 rotated files
 | 
			
		||||
        auto file_logger = spd::rotating_logger_mt("file_logger", "logs/mylogfile", 1048576 * 5, 3);
 | 
			
		||||
        file_logger->set_level(spd::level::info);
 | 
			
		||||
        for(int i = 0; i < 10; ++i)
 | 
			
		||||
		      file_logger->info("{} * {} equals {:>10}", i, i, i*i);
 | 
			
		||||
		console->info("{:<30}", "left aligned");
 | 
			
		||||
		console->info("{:>30}", "right aligned");
 | 
			
		||||
		console->info("{:^30}", "centered");
 | 
			
		||||
 | 
			
		||||
        // Customize msg format for all messages
 | 
			
		||||
        spd::set_pattern("*** [%H:%M:%S %z] [thread %t] %v ***");
 | 
			
		||||
        file_logger->info("This is another message with custom format");
 | 
			
		||||
		// Create a file rotating logger with 5mb size max and 3 rotated files
 | 
			
		||||
		auto file_logger = spd::rotating_logger_mt("file_logger", "logs/mylogfile", 1048576 * 5, 3);
 | 
			
		||||
		file_logger->set_level(spd::level::info);
 | 
			
		||||
		for(int i = 0; i < 10; ++i)
 | 
			
		||||
			file_logger->info("{} * {} equals {:>10}", i, i, i*i);
 | 
			
		||||
 | 
			
		||||
        spd::get("console")->info("loggers can be retrieved from a global registry using the spdlog::get(logger_name) function");
 | 
			
		||||
		// Customize msg format for all messages
 | 
			
		||||
		spd::set_pattern("*** [%H:%M:%S %z] [thread %t] %v ***");
 | 
			
		||||
		file_logger->info("This is another message with custom format");
 | 
			
		||||
 | 
			
		||||
        SPDLOG_TRACE(console, "Enabled only #ifdef SPDLOG_TRACE_ON..{} ,{}", 1, 3.23);
 | 
			
		||||
        SPDLOG_DEBUG(console, "Enabled only #ifdef SPDLOG_DEBUG_ON.. {} ,{}", 1, 3.23);
 | 
			
		||||
		spd::get("console")->info("loggers can be retrieved from a global registry using the spdlog::get(logger_name) function");
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Asynchronous logging is very fast..
 | 
			
		||||
        // Just call spdlog::set_async_mode(q_size) and all created loggers from now on will be asynchronous..
 | 
			
		||||
        //
 | 
			
		||||
        size_t q_size = 1048576; //queue size must be power of 2
 | 
			
		||||
        spdlog::set_async_mode(q_size);
 | 
			
		||||
        auto async_file= spd::daily_logger_st("async_file_logger", "logs/async_log.txt");
 | 
			
		||||
        async_file->info() << "This is async log.." << "Should be very fast!";
 | 
			
		||||
               
 | 
			
		||||
    	// syslog example. linux only..       
 | 
			
		||||
		#ifdef __linux__
 | 
			
		||||
        std::string ident = "spdlog-example";
 | 
			
		||||
        auto syslog_logger = spd::syslog_logger("syslog", ident, LOG_PID);
 | 
			
		||||
        syslog_logger->warn("This is warning that will end up in syslog. This is Linux only!");       
 | 
			
		||||
		#endif
 | 
			
		||||
		SPDLOG_TRACE(console, "Enabled only #ifdef SPDLOG_TRACE_ON..{} ,{}", 1, 3.23);
 | 
			
		||||
		SPDLOG_DEBUG(console, "Enabled only #ifdef SPDLOG_DEBUG_ON.. {} ,{}", 1, 3.23);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    catch (const spd::spdlog_ex& ex)
 | 
			
		||||
    {
 | 
			
		||||
        std::cout << "Log failed: " << ex.what() << std::endl;
 | 
			
		||||
    }
 | 
			
		||||
		//
 | 
			
		||||
		// Asynchronous logging is very fast..
 | 
			
		||||
		// Just call spdlog::set_async_mode(q_size) and all created loggers from now on will be asynchronous..
 | 
			
		||||
		//
 | 
			
		||||
		size_t q_size = 1048576; //queue size must be power of 2
 | 
			
		||||
		spdlog::set_async_mode(q_size);
 | 
			
		||||
		auto async_file= spd::daily_logger_st("async_file_logger", "logs/async_log.txt");
 | 
			
		||||
		async_file->info() << "This is async log.." << "Should be very fast!";
 | 
			
		||||
 | 
			
		||||
		// syslog example. linux only..
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
		std::string ident = "spdlog-example";
 | 
			
		||||
		auto syslog_logger = spd::syslog_logger("syslog", ident, LOG_PID);
 | 
			
		||||
		syslog_logger->warn("This is warning that will end up in syslog. This is Linux only!");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	catch (const spd::spdlog_ex& ex)
 | 
			
		||||
	{
 | 
			
		||||
		std::cout << "Log failed: " << ex.what() << std::endl;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -34,21 +34,21 @@ namespace utils
 | 
			
		||||
template<typename T>
 | 
			
		||||
inline std::string format(const T& value)
 | 
			
		||||
{
 | 
			
		||||
    static std::locale loc("");
 | 
			
		||||
    std::stringstream ss;
 | 
			
		||||
    ss.imbue(loc);
 | 
			
		||||
    ss << value;
 | 
			
		||||
    return ss.str();
 | 
			
		||||
	static std::locale loc("");
 | 
			
		||||
	std::stringstream ss;
 | 
			
		||||
	ss.imbue(loc);
 | 
			
		||||
	ss << value;
 | 
			
		||||
	return ss.str();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<>
 | 
			
		||||
inline std::string format(const double & value)
 | 
			
		||||
{
 | 
			
		||||
    static std::locale loc("");
 | 
			
		||||
    std::stringstream ss;
 | 
			
		||||
    ss.imbue(loc);
 | 
			
		||||
    ss << std::fixed << std::setprecision(1) << value;
 | 
			
		||||
    return ss.str();
 | 
			
		||||
	static std::locale loc("");
 | 
			
		||||
	std::stringstream ss;
 | 
			
		||||
	ss.imbue(loc);
 | 
			
		||||
	ss << std::fixed << std::setprecision(1) << value;
 | 
			
		||||
	return ss.str();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user