create_console_logger now uses the correct color sink depending on your platform

pull/194/head
Christopher Torres 10 years ago
parent e76cf117c2
commit 5f52c114e5
No known key found for this signature in database
GPG Key ID: D26CE56FC38D0C83

@ -1,149 +1,154 @@
// //
// Copyright(c) 2015 Gabi Melman. // Copyright(c) 2015 Gabi Melman.
// Distributed under the MIT License (http://opensource.org/licenses/MIT) // Distributed under the MIT License (http://opensource.org/licenses/MIT)
// //
#pragma once #pragma once
// //
// Global registry functions // Global registry functions
// //
#include <spdlog/spdlog.h> #include <spdlog/spdlog.h>
#include <spdlog/details/registry.h> #include <spdlog/details/registry.h>
#include <spdlog/sinks/file_sinks.h> #include <spdlog/sinks/file_sinks.h>
#include <spdlog/sinks/stdout_sinks.h> #include <spdlog/sinks/stdout_sinks.h>
#include <spdlog/sinks/syslog_sink.h> #include <spdlog/sinks/syslog_sink.h>
#include <spdlog/sinks/ansicolor_sink.h> #include <spdlog/sinks/ansicolor_sink.h>
#include <spdlog/sinks/wincolor_sink.h>
#include <chrono>
#include <functional> #include <chrono>
#include <memory> #include <functional>
#include <string> #include <memory>
#include <string>
inline void spdlog::register_logger(std::shared_ptr<logger> logger)
{ inline void spdlog::register_logger(std::shared_ptr<logger> logger)
return details::registry::instance().register_logger(logger); {
} return details::registry::instance().register_logger(logger);
}
inline std::shared_ptr<spdlog::logger> spdlog::get(const std::string& name)
{ inline std::shared_ptr<spdlog::logger> spdlog::get(const std::string& name)
return details::registry::instance().get(name); {
} return details::registry::instance().get(name);
}
inline void spdlog::drop(const std::string &name)
{ inline void spdlog::drop(const std::string &name)
details::registry::instance().drop(name); {
} details::registry::instance().drop(name);
}
// Create multi/single threaded rotating file logger
inline std::shared_ptr<spdlog::logger> spdlog::rotating_logger_mt(const std::string& logger_name, const filename_t& filename, size_t max_file_size, size_t max_files, bool force_flush) // Create multi/single threaded rotating file logger
{ inline std::shared_ptr<spdlog::logger> spdlog::rotating_logger_mt(const std::string& logger_name, const filename_t& filename, size_t max_file_size, size_t max_files, bool force_flush)
return create<spdlog::sinks::rotating_file_sink_mt>(logger_name, filename, SPDLOG_FILENAME_T("txt"), max_file_size, max_files, force_flush); {
} return create<spdlog::sinks::rotating_file_sink_mt>(logger_name, filename, SPDLOG_FILENAME_T("txt"), max_file_size, max_files, force_flush);
}
inline std::shared_ptr<spdlog::logger> spdlog::rotating_logger_st(const std::string& logger_name, const filename_t& filename, size_t max_file_size, size_t max_files, bool force_flush)
{ inline std::shared_ptr<spdlog::logger> spdlog::rotating_logger_st(const std::string& logger_name, const filename_t& filename, size_t max_file_size, size_t max_files, bool force_flush)
return create<spdlog::sinks::rotating_file_sink_st>(logger_name, filename, SPDLOG_FILENAME_T("txt"), max_file_size, max_files, force_flush); {
} return create<spdlog::sinks::rotating_file_sink_st>(logger_name, filename, SPDLOG_FILENAME_T("txt"), max_file_size, max_files, force_flush);
}
// Create file logger which creates new file at midnight):
inline std::shared_ptr<spdlog::logger> spdlog::daily_logger_mt(const std::string& logger_name, const filename_t& filename, int hour, int minute, bool force_flush) // Create file logger which creates new file at midnight):
{ inline std::shared_ptr<spdlog::logger> spdlog::daily_logger_mt(const std::string& logger_name, const filename_t& filename, int hour, int minute, bool force_flush)
return create<spdlog::sinks::daily_file_sink_mt>(logger_name, filename, SPDLOG_FILENAME_T("txt"), hour, minute, force_flush); {
} return create<spdlog::sinks::daily_file_sink_mt>(logger_name, filename, SPDLOG_FILENAME_T("txt"), hour, minute, force_flush);
}
inline std::shared_ptr<spdlog::logger> spdlog::daily_logger_st(const std::string& logger_name, const filename_t& filename, int hour, int minute, bool force_flush)
{ inline std::shared_ptr<spdlog::logger> spdlog::daily_logger_st(const std::string& logger_name, const filename_t& filename, int hour, int minute, bool force_flush)
return create<spdlog::sinks::daily_file_sink_st>(logger_name, filename, SPDLOG_FILENAME_T("txt"), hour, minute, force_flush); {
} return create<spdlog::sinks::daily_file_sink_st>(logger_name, filename, SPDLOG_FILENAME_T("txt"), hour, minute, force_flush);
}
// Create stdout/stderr loggers (with optinal color support)
inline std::shared_ptr<spdlog::logger> create_console_logger(const std::string& logger_name, spdlog::sink_ptr sink, bool color) // Create stdout/stderr loggers (with optinal color support)
{ inline std::shared_ptr<spdlog::logger> create_console_logger(const std::string& logger_name, spdlog::sink_ptr sink, bool color)
if (color) //use color wrapper sink {
sink = std::make_shared<spdlog::sinks::ansicolor_sink>(sink); if (color) //use color wrapper sink
return spdlog::details::registry::instance().create(logger_name, sink); #ifdef _WIN32
} sink = std::make_shared<spdlog::sinks::wincolor_sink>(sink);
#else
inline std::shared_ptr<spdlog::logger> spdlog::stdout_logger_mt(const std::string& logger_name, bool color) sink = std::make_shared<spdlog::sinks::ansicolor_sink>(sink);
{ #endif
return create_console_logger(logger_name, sinks::stdout_sink_mt::instance(), color); return spdlog::details::registry::instance().create(logger_name, sink);
} }
inline std::shared_ptr<spdlog::logger> spdlog::stdout_logger_st(const std::string& logger_name, bool color) inline std::shared_ptr<spdlog::logger> spdlog::stdout_logger_mt(const std::string& logger_name, bool color)
{ {
return create_console_logger(logger_name, sinks::stdout_sink_st::instance(), color); return create_console_logger(logger_name, sinks::stdout_sink_mt::instance(), color);
} }
inline std::shared_ptr<spdlog::logger> spdlog::stderr_logger_mt(const std::string& logger_name, bool color) inline std::shared_ptr<spdlog::logger> spdlog::stdout_logger_st(const std::string& logger_name, bool color)
{ {
return create_console_logger(logger_name, sinks::stderr_sink_mt::instance(), color); return create_console_logger(logger_name, sinks::stdout_sink_st::instance(), color);
} }
inline std::shared_ptr<spdlog::logger> spdlog::stderr_logger_st(const std::string& logger_name, bool color) inline std::shared_ptr<spdlog::logger> spdlog::stderr_logger_mt(const std::string& logger_name, bool color)
{ {
return create_console_logger(logger_name, sinks::stderr_sink_st::instance(), color); return create_console_logger(logger_name, sinks::stderr_sink_mt::instance(), color);
} }
#if defined(__linux__) || defined(__APPLE__) inline std::shared_ptr<spdlog::logger> spdlog::stderr_logger_st(const std::string& logger_name, bool color)
// Create syslog logger {
inline std::shared_ptr<spdlog::logger> spdlog::syslog_logger(const std::string& logger_name, const std::string& syslog_ident, int syslog_option) return create_console_logger(logger_name, sinks::stderr_sink_st::instance(), color);
{ }
return create<spdlog::sinks::syslog_sink>(logger_name, syslog_ident, syslog_option);
} #if defined(__linux__) || defined(__APPLE__)
#endif // Create syslog logger
inline std::shared_ptr<spdlog::logger> spdlog::syslog_logger(const std::string& logger_name, const std::string& syslog_ident, int syslog_option)
{
//Create logger with multiple sinks return create<spdlog::sinks::syslog_sink>(logger_name, syslog_ident, syslog_option);
}
inline std::shared_ptr<spdlog::logger> spdlog::create(const std::string& logger_name, spdlog::sinks_init_list sinks) #endif
{
return details::registry::instance().create(logger_name, sinks);
} //Create logger with multiple sinks
inline std::shared_ptr<spdlog::logger> spdlog::create(const std::string& logger_name, spdlog::sinks_init_list sinks)
template <typename Sink, typename... Args> {
inline std::shared_ptr<spdlog::logger> spdlog::create(const std::string& logger_name, Args... args) return details::registry::instance().create(logger_name, sinks);
{ }
sink_ptr sink = std::make_shared<Sink>(args...);
return details::registry::instance().create(logger_name, { sink });
} template <typename Sink, typename... Args>
inline std::shared_ptr<spdlog::logger> spdlog::create(const std::string& logger_name, Args... args)
{
template<class It> sink_ptr sink = std::make_shared<Sink>(args...);
inline std::shared_ptr<spdlog::logger> spdlog::create(const std::string& logger_name, const It& sinks_begin, const It& sinks_end) return details::registry::instance().create(logger_name, { sink });
{ }
return details::registry::instance().create(logger_name, sinks_begin, sinks_end);
}
template<class It>
inline void spdlog::set_formatter(spdlog::formatter_ptr f) inline std::shared_ptr<spdlog::logger> spdlog::create(const std::string& logger_name, const It& sinks_begin, const It& sinks_end)
{ {
details::registry::instance().formatter(f); return details::registry::instance().create(logger_name, sinks_begin, sinks_end);
} }
inline void spdlog::set_pattern(const std::string& format_string) inline void spdlog::set_formatter(spdlog::formatter_ptr f)
{ {
return details::registry::instance().set_pattern(format_string); details::registry::instance().formatter(f);
} }
inline void spdlog::set_level(level::level_enum log_level) inline void spdlog::set_pattern(const std::string& format_string)
{ {
return details::registry::instance().set_level(log_level); return details::registry::instance().set_pattern(format_string);
} }
inline void spdlog::set_level(level::level_enum log_level)
inline void spdlog::set_async_mode(size_t queue_size, const async_overflow_policy overflow_policy, const std::function<void()>& worker_warmup_cb, const std::chrono::milliseconds& flush_interval_ms) {
{ return details::registry::instance().set_level(log_level);
details::registry::instance().set_async_mode(queue_size, overflow_policy, worker_warmup_cb, flush_interval_ms); }
}
inline void spdlog::set_sync_mode() inline void spdlog::set_async_mode(size_t queue_size, const async_overflow_policy overflow_policy, const std::function<void()>& worker_warmup_cb, const std::chrono::milliseconds& flush_interval_ms)
{ {
details::registry::instance().set_sync_mode(); details::registry::instance().set_async_mode(queue_size, overflow_policy, worker_warmup_cb, flush_interval_ms);
} }
inline void spdlog::drop_all() inline void spdlog::set_sync_mode()
{ {
details::registry::instance().drop_all(); details::registry::instance().set_sync_mode();
} }
inline void spdlog::drop_all()
{
details::registry::instance().drop_all();
}

Loading…
Cancel
Save